【发布时间】:2014-10-17 02:57:36
【问题描述】:
我们开发人员的一个文本编辑器弄乱了我们 PHP 文件的行尾。我们已经尝试了所有设置,但编辑器似乎仍然在保存时将 CR-LF 替换为 LF。
当然,最明智的做法是用一个像样的编辑器替换编辑器,但我认为:为什么不配置 Git 来处理行尾的差异呢?这就是我卡住的地方;我无法让它正常工作,我想听听你的建议。
我们检查的文件似乎有 CR-LF 行结尾。当我们的开发人员编辑它们并存储它们时,它们同样具有 LF 结尾。提交文件时,不仅行会发生变化,而且每一行都会被删除并重新插入。
我已将 core.autocrlf 设置为 true。提交时,我收到一条警告,所有 LF 都将被 CR-LF 替换。该文件将在您的工作目录中具有原始结尾。但是,所有行都被删除并再次添加。当与另一个分支合并时,这会产生冲突。
我尝试使用*.php text 制作.gitattributes 文件。结果与core.autocrlf 相同。
所以我的问题是:有没有办法将 Git 配置为仅提交我们程序员所做的更改,而只保留仅行尾发生更改的行?
【问题讨论】:
-
您应该编辑您的问题以添加一些信息。您和您的开发人员使用哪个平台(Windows、*nix)?有问题的编辑器是什么?
-
你读过这个吗? help.github.com/articles/dealing-with-line-endings 它表明一旦你设置了一个 .gitattributes 文件,github 就会想要改变所有的行尾。来自文档:“自动配置存储库行结尾的最佳方法是首先使用 Git 备份文件,删除存储库中的每个文件(.git 目录除外),然后一次恢复所有文件。”跨度>
-
是的,我阅读了处理行尾和最佳 CRLF 策略文章,但我之所以问,是因为它似乎没有任何作用。这是我刚才所做的: - 删除了 workdir 中除 .git 之外的所有文件 - 添加并提交了 [code]*.php text[/code] 的 [code].gitattributes[/code] 文件 - 设置 [code] core.autocrlf[/code] 配置为 [code]true[/code] - 做了一个 [code]git reset --hard[/code] 让 git 再次创建所有文件
-
所以现在我有了这个带有 CRLF 行结尾的文件。我打开文件并再次保存它,只使用 LF 行结尾(我在十六进制编辑器中检查了它)。 Git diff 显示所有行都已更改。 Git add 和 Git commit 导致所有行都被替换。
标签: php git newline line-endings