“ git checkout --patch”与autocrlf = true不兼容吗?

时间:2019-01-14 15:56:38

标签: windows git

在Windows计算机上,我正在考虑在.gitconfig中设置autocrlf = true。我团队中的其他人都采用了这种方式,因此我们在回购中最终混合了lfcrlf。我考虑了一些选择,这似乎是阻力最小的途径...

我注意到的一件事是git checkout -p失败时patch does not apply出现错误autocrlf = true。如果我将其更改回false,它将按预期工作。

autcrlf = truecheckout --patch不兼容,还是我需要设置其他选项才能使其正常工作?

有趣的是,git add --patchautocrlf = true一样正常工作。

1 个答案:

答案 0 :(得分:2)

git checkout --patch可与行尾翻译一起正常使用。该补丁几乎肯定不会应用,因为您的配置不匹配。

团队中的每个人都需要使用相同行结尾配置。 core.autocrlf=true不是团队中一个人可以启用的选项;每个人都需要相同设置。那是因为如果您有core.autocrlf=false,那么您就是在告诉Git磁盘上的内容与存储库中的内容相同。如果您使用的是Windows,则表示您要签入Windows样式的行尾(\r\n)文件。如果您有一个启用core.autocrlf=true的同事,那么您告诉Git磁盘上的内容具有Windows样式的行尾,而存储库中的内容具有Unix样式的行尾(\n)。 / p>

但是您的同事告诉git一个谎言,因为存储库中的内容实际上包含\r\n

这些设置不匹配时,可能会发生各种奇怪的事情,包括补丁无法应用之类的事情。

您应该改为:

  1. * text=auto文件中设置.gitattributes。这样可以确保在存储库中工作的每个人都具有相同的设置,因为配置实际上是已签入,而不是每个人都必须记住要正确配置的内容。

  2. 重新标准化存储库,以使存储库内容实际与您声明的内容匹配。您可以通过git add --renormalize .并检查其中的内容来完成此操作。

完成此操作后(每个人都更新了本地工作文件夹),您的git apply --patch应该会正常运行。