Git CRLF用于Windows用户

4
我知道有大量关于这个问题的文章。但是我已经苦苦挣扎了几周,却没有成功。
我试图使用在GitHub上描述的最佳实践。因此,我添加了一个.gitattributes文件,例如它看起来像这样:
*.cs text

我已经将所有文件的行尾规范化了。现在我有一个干净的工作副本,没有需要提交的内容。但是,如果我在任何Windows文本编辑器中打开文件并进行一些随机更改、保存文件、撤销更改,那么我会看到这个文件已经被更改了。我知道这是因为文件现在具有Windows风格的行尾。但这种方式非常糟糕,因为文件实际上没有更改,我希望Git能够知道这一点,而不用使用 git reset --hard 命令。在这种情况下,你有什么建议吗?


你是如何实际地“规范化”它的?对于Windows,我在我的.cs文件中使用\r\n并使用“as-is”行结尾git设置。 - zerkms
文件发生了变化是怎么告诉你的?你尝试过运行 git status 命令来刷新缓存吗? - CB Bailey
是的,git status 表示文件已更改。 - Sly
@zerkms 我使用 git rm --cached . 命令删除了所有文件,并使用 git reset --hard 命令强制让所有文件被 Git 修改。 - Sly
2个回答

6
如果您不想让文件的eol样式被改回Windows,就不要要求Git执行任何“自动化”转换。因此,与GitHub的“最佳实践”相反:
git config --global core.autocrlf true

如果你真的(我是说真的)需要一个特定目录中的一个特定文件集来获得特定的eol样式,请在该目录下的.gitattributes文件中添加它,意思是不使用text=auto,仅使用"text eol=lf或crlf"。

一些更多的参考:http://git-scm.com/book/en/Customizing-Git-Git-Configuration#Formatting-and-Whitespace - Marcin Koziński
那么您的意思是设置 *.cs -text=auto int gitattributes 以覆盖 core.autocrlf 设置? - Sly
@Sly 如果 core.autocrlf 设置为 false,你就不需要使用 auto 了。只有当你想强制执行特定的样式时,才需要使用 lfcrlf。如果你的文本编辑器在保存文件时不改变行尾符,则什么也不用做。 - VonC

3

这里真正的问题是:你在做什么,和谁合作?

除非你在做开源软件工作,否则所有这些属性混淆都不值得。对于一个团队的组织,可以通过设置以下内容来关闭自动换行:

core.autocrlf false

这涵盖了大部分情况。

如果您有一个在GitHub上的子模块,您可以按照每个仓库的基础设置它们。


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