如何配置Git忽略行尾的更改?

5
我们的开发人员的文本编辑器破坏了我们PHP文件的行结束符。我们尝试了所有设置,但是编辑器似乎仍然会在保存时将CR-LF替换为LF。
当然,最明智的做法是用一个好的编辑器替换它,但我想:为什么不配置Git来处理行尾差异呢?这就是我卡住的地方;我无法使其正常工作,希望得到您的建议。
似乎我们检出的文件具有CR-LF行结束符。当我们的开发人员编辑并存储它们时,它们似乎具有LF结束符。当提交文件时,不仅行数发生变化,而且每一行都被删除并重新插入。
我已经将core.autocrlf设置为true。当提交时,我会收到警告,所有的LF都将被CR-LF替换。该文件将在您的工作目录中具有原始结尾。但是,所有行都被删除并再次添加。当与另一个分支合并时,这会产生冲突。
我尝试创建一个.gitattributes文件,其中包含*.php text。结果与core.autocrlf相同。
所以我的问题是:有没有办法配置Git只提交程序员所做的更改,并保留仅更改了行结尾的行?

你应该编辑你的问题并添加一些信息。你和你的开发者使用哪个平台(Windows,*nix)?有问题的编辑器是什么? - jub0bs
你读过这个吗?https://help.github.com/articles/dealing-with-line-endings 它建议一旦设置了.gitattributes文件,github将想要更改所有行尾。从文档中可以看出:“自动配置存储库的行尾的最佳方法是首先使用Git备份文件,删除存储库中的每个文件(除了.git目录),然后一次性恢复所有文件。” - i alarmed alien
是的,我已经阅读了 dealing-with-line-endings 和 The Best CRLF strategy 文章,但我之所以问是因为它似乎没有做任何事情。这是我刚刚做的:
  • 删除了工作目录中除 .git 以外的所有文件
  • 添加并提交了一个 [code].gitattributes[/code] 文件,其中包含 [code]*.php text[/code]
  • 将 [code]core.autocrlf[/code] 配置设置为 [code]true[/code]
  • 运行 [code]git reset --hard[/code] 命令,让 git 再次创建所有文件
- William van Veldhoven
现在我有一个带有CRLF行结尾的文件。我打开了这个文件并将其重新保存为仅包含LF行结尾(我在十六进制编辑器中进行了检查)。Git diff显示所有行都已更改。Git add和Git commit导致所有行被替换。 - William van Veldhoven
1个回答

2
据我所记,你无法完全实现这一点。但是,配置可以让你忽略特定的行尾符。
如果你想在存储库中存储所有使用LF行尾的文件,请运行:
git config --system core.autocrlf false git config --system core.eol lf
此外,你可能想确保全局、系统和本地配置设置为你想要实现的内容:
git config --global -l git config --system -l git config --local -l

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接