【问题标题】:Git CRLF for windows users适用于 Windows 用户的 Git CRLF
【发布时间】:2012-07-17 01:19:46
【问题描述】:

我知道有很多关于这个问题的文章。但我为此苦苦挣扎了几个星期,但没有成功。

我正在尝试使用github 中描述的最佳做法。所以我添加了一个 .gitattributes 文件,例如它看起来像这样:

*.cs text

我已经对所有文件的行尾进行了规范化。现在我有干净的工作副本,没有什么可提交的。但是现在,如果我在任何 Windows 文本编辑器中打开一个罚款并进行一些随机更改,保存文件,撤消该更改,我会看到该文件已更改。我知道这是因为文件现在具有 Windows 样式的行尾。但这是一种可怕的工作方式,文件没有任何变化,我希望 git 在没有git reset --hard 的情况下知道它。在这种情况下你会推荐什么?

【问题讨论】:

  • 您实际上是如何“标准化”它的?对于 Windows,我在 .cs 文件中使用 \r\n 并使用 as-is 行结尾 git 设置
  • 什么告诉你文件已经改变了。您是否尝试过运行git status 来刷新缓存?
  • 是的 git status 表明文件已更改。
  • @zerkms 我已经用 git rm --cached 删除了所有文件。并使 git reset --hard 强制所有文件被 git 修改

标签: windows git gitattributes core.autocrlf


【解决方案1】:

如果您不想将文件的 eol 样式改回 windows,请不要让 git 执行任何“自动”转换。
所以,与“best practices from GitHub”相反:

git config --global core.autocrlf true

如果你真的(我的意思是真的)需要一个特定目录中的一组特定文件来获得特定的 eol 样式,请将其添加到所述目录中的 .gitattributes file,意思是 不使用text=auto,只使用“text eol=lf or crlf

【讨论】:

  • 更多参考:git-scm.com/book/en/…
  • 所以您的意思是设置 *.cs -text=auto int gitattributes 以覆盖 core.autocrlf 设置?
  • @Sly 如果 core.autocrlf 设置为 false,则您永远不需要使用 auto。只有 lfcrlf 如果您想强制执行特定样式。或者什么都没有,如果你的文本编辑器在保存文件时没有改变 eol。
【解决方案2】:

这里真正的问题是:您在做什么以及与谁合作?

除非你在做 OSS 的工作,否则所有这些属性混淆是不值得的。对于有一群人的组织,通过设置关闭自动换行结束转换:

core.autocrlf false

这涵盖了大多数情况。

如果您在 GitHub 上有一个子模块,您可以根据每个 repo 进行设置。

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 2022-01-12
    • 2014-12-24
    • 1970-01-01
    • 2019-12-03
    • 2016-04-10
    • 1970-01-01
    • 2013-08-23
    • 2021-01-07
    相关资源
    最近更新 更多