这听起来像是一个多余的问题(而且很可能是一个多余的问题),但我找不到答案。情况是这样的:
我的应用程序正在创建以 CR 作为行尾的文本文件。更具体地说,我没有明确地将行结尾设置为 CR,它恰好是我用来获取文本正文的命令的输出。当然,我可以手动将 CR 转换为 LF,但如果可以避免,我不想这样做。
Git 将这些文件视为单行(例如,在 diff 期间)。我已通过此测试存储库确定行尾是原因:https://github.com/jfletcher4d/diff-test
我实际上并不关心文件系统上的行尾是什么。这并不重要,至少现在还不重要(我最终可能会关心是否需要导入这些文件,现在它只是导出)。但是我不想想在我的应用程序中将 CR 转换为 LF,如果我可以避免的话,出于性能原因以及 anal-retentativeness 原因:) 即这不是如何创建文本文件的问题,而是如何强制 repo 中的每个文本文件都只有 LF 的问题。
是否可以将 git 配置为将 所有 行结尾更改为 LF,即使文件是用 CR 提交的?
我在 Windows 上,在学习 git 的同时交替使用 TortoiseGit 和 msysgit(还有一点 TortoiseSVN),如果这很重要的话。
最佳答案
Git 似乎不支持 CR 行结尾,所以我会写一个 filter转换换行符。工作树中的文件将有 CR 行结尾,并且在索引时它们将透明地转换为 LF。过滤器分为两部分:“clean”检查文件,“smudge”检查文件。
在 .git/config
中使用:
[filter "cr"]
clean = tr '\\r' '\\n'
smudge = tr '\\n' '\\r'
和 .git/info/attributes
(或者 .gitattributes
如果它应该被版本控制)
* filter=cr
请注意,这会自动让 git-diff
满意,因为它将使用“干净”版本。
请记住仅将模式设置为您需要的文件,否则二进制文件将被损坏并且所有文本文件将以 CR 行结尾 check out 。
另请注意,如果未配置过滤器,它将自动失败,因此在设置存储库的新副本时添加配置行。
关于git 和 CR 与 LF(但不是 CRLF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10491564/