【发布时间】:2014-03-16 17:43:18
【问题描述】:
需要解决的问题:
我有一个包含单个 .md 文件的存储库,其中包含我正在写的一篇文章。
我从几台不同的计算机编辑文件,一台运行 Linux,另一台运行 Windows。
现在在 Windows 中查看git diff,我已经进行了一些更改,我可以看到我的文章显示为很好地分开的文本行......所有即将被删除并被一个长行替换,其中是段落以^Ms 分隔。
我知道^M 指的是 Windows 的 CLRF 行结尾。
diff 结果表明我在 Linux 中启动了该文件(完全有可能;我不记得了),然后将其保存在 Windows 中,并且所有行尾都已被替换。
我希望能够在两个操作系统中打开文件,并按应有的方式显示行,并有一个 diff 结果显示换行符(而不是 ^M 占位符)并且只更改实际内容。
我尝试过的:
我已经完成了一些background reading,阅读了nice overview 的行尾和Git 设置,甚至尝试按照another Stack Overflow question 中的命令进行操作。
就目前而言,我在存储库的顶层有一个.gitattributes 文件,我已将其提交给存储库本身。它只包含两行:
# These files are text and should be normalised (convert Windows' CLRF to LF)
*.md text
我已经试过了(source):
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"
还有这个(source):
git rm --cached -r .
git config core.autocrlf input
git diff --cached --name-only -z | xargs -0 git add
git commit -m "Fixed crlf issue"
在第二种情况下,最后一个命令告诉我没有什么要提交的。 (我也不喜欢更改core.autoclrf 的想法,因为我试图完全通过.gitattributes 来做这件事,但我感到很沮丧。)
很高兴回答问题并提供更多详细信息。有什么想法我可能会出错吗?我错过了一步吗?
【问题讨论】:
-
附带说明,您可以定义将
-Xignore-all-space添加到 diff 和 merge 的别名,这样您就不会因空格更改而烦恼(您可能想寻找一种只忽略行的策略结尾,而不是所有空格)。 -
感谢@Shahbaz,稍后我会尝试使用它并报告。
标签: linux windows git eol gitattributes