使用`.gitattributes`文件修复Git存储库中的行尾



需要修复的内容:

我有一个包含单个.md文件的存储库,其中包含我正在写的一篇文章。

我在几台不同的计算机上编辑文件,一台运行Linux,两台运行Windows。

现在在Windows中查看git diff,我已经做了一些更改,我可以看到我的文章显示为很好地分隔的文本行。。。所有这些都将被删除,并由一条长行代替,其中段落由^Ms分隔。

我知道^M指的是Windows的CLRF行结尾。

diff的结果意味着我在Linux中启动了该文件(完全可能;我不记得了),并将其保存在Windows中,并且所有的行尾都被替换了。

我希望能够在两个操作系统中打开文件,其中的行显示为它们应该显示的行,并且有一个显示换行符(而不是^M占位符)的diff结果,并且只更改实际内容。

我尝试过的:

我做了一些背景阅读,读了一篇关于行尾和Git设置的综述,甚至试着遵循另一个Stack Overflow问题中的命令。

目前,我在存储库的顶层有一个.gitattributes文件,我已将其提交给存储库本身。它只包含两行:

# These files are text and should be normalised (convert Windows' CLRF to LF)
*.md text

我试过这个(来源):

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

这个(来源):

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来实现这一点,但我感到沮丧。)

很乐意回答问题并提供更多详细信息。有什么想法我会出错吗?我是不是少了一步?

尝试使用

*.md text eol=native

而不是

*.md text

在你的.gitattributes.中

我确实建立了一个小的测试repo,里面有一个CR-LF文件,并遵循了您的第一个过程来执行规范化:

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

在签入时正确规范化的文件。但是,奇怪的是,即使我在OSX上,它在结账时仍然保持CR-LF。

据推测,core.eol的默认值是本机的。所以,我希望git只使用LF来签出我的文件。但似乎出于某种原因,它只是没有这么做。所以,我对.gitattributes的理解是有缺陷的,或者我们有一个bug需要提交给git。。。

无论如何,正如我所说的,在.gitattributes中显式设置eol=native对我来说很有用。

相关内容

  • 没有找到相关文章

最新更新