-1

缩短问题:

我可以通过使用 .gitattributes 并将有问题的文件设置为二进制来解决我的各种 Git 行结束跨平台转换问题吗?我无法控制回购或用户设置。

另外:面向 Web 的 Windows 开发仍然需要 CRLF 吗?大多数工具都具有自动检测或切换模式的选项,并且似乎仅适用于 LF。

(删除咆哮)

注意:我已经在这里阅读了很多(全部?)答案,阅读了帮助,阅读了这本书,并为此花费了太多时间。

更新:

我没有看这个帮助文件,它提到text了 .gitattributes 中的取消设置:

未设置

取消设置路径上的文本属性告诉 git 在签入或签出时不要尝试任何行尾转换。

为什么“help.github.com”和“git-scm.com”都没有提到这是一个可能的解决方案,这超出了我的理解,但描述看起来不错。

但是 github 帮助确实粗略地提到了它,这就是为什么我认为这就是我想要的。

二进制设置是 -text -diff 的别名

我要试试,如果成功了再更新。

更新 2:

有效!*.txt -text在 .gitattributes 中使用成功了:没有转换但仍然可以区分和行/字符摘要等)

4

4 回答 4

1

您可以配置 git 在添加内容时将 CRLF 转换为 LF,但反之则不行:

git config --global core.autocrlf input

来自git-config(1) 的相关文档

core.autocrlf
将此变量设置为“true”与将所有文件的文本属性设置为“auto”几乎相同,但不保证文本文件被规范化:存储库中包含 CRLF 的文件将不会被触及。如果您希望在工作目录中使用 CRLF 行结尾,即使存储库没有规范化的行结尾,也可以使用此设置。该变量可以设置为输入,在这种情况下不执行输出转换。

或者在这个 SO 答案中进行更深入的解释:git replace LF with CRLF

于 2013-11-04T15:07:10.467 回答
1

我认为,如果您将所有内容都转换为二进制,那么您的提交将不再是行差异,这将 stopgit diffgit log --statowt 像那样工作。您最好的选择是确保所有文件都保存为 LF,使用 core.autocrlf 输入强制将所有文件转换为 LF,或者如果它给您带来这么多麻烦,请尝试不同的 VCS。

于 2013-11-04T15:18:23.410 回答
0

你可以尝试一下,看看它对你有用:

git config core.autocrlf false          # no automatic eol munging
git config core.whitespace cr-at-eof    # diff ignores trailing CR
git config branch.<name>.mergeoptions -Xignore-space-at-eol

并且最好避免使用显式text属性.gitattributes(这会在结帐时强制 eol 转换,尽管转换后的版本不会被无偿签入)。

请参阅合并文档以了解该分支 config 的效果(以及config docs),它似乎对我来说效果很好。或者只是在遇到问题时手动指定它。

如果您有其他无法处理混合或外来 eol 的工具,您仍然必须解决它们的限制,也许通过在eol它们需要的文件上放置显式属性。我自己会把它作为每个回购的事情,如果工具得到修复,这是一个本地问题。

于 2013-11-04T22:28:41.517 回答
0

正如我在我的问题中更新的那样:使用-text.gitattributes来使 git 将文件作为文本进行处理,但不进行任何行转换。它仍然会显示差异(以及相关的更改摘要):

*.txt    -text
于 2013-11-18T19:02:58.297 回答