GIT中和CR VS LF(但不是CRLF)(git and CR vs LF (but NOT C

2019-07-29 07:38发布

这听起来像一个多余的问题(并且很可能是一个redundnant问题),但我无法找到答案。 这里的情况:

我的应用程序创建具有CR的作为行结尾的文本文件。 更具体地讲,我没有明确的行结束设置为CR,它恰好是我使用来获取文本体的命令的输出。 当然,我可以手动转换CR对LF的,但我不想,如果我能避免它。

Git的处理这些文件为单线(如DIFF期间)。 :我已经通过这个测试库,该行结束是确定原因https://github.com/jfletcher4d/diff-test

我并不真正关心的行结束是在文件系统上的内容。 这不是重要的,至少目前还没有(我最终可能会关心我是否需要进口这些文件,现在它是唯一的出口)。 但我希望转换的CR的劳动力调查在我的应用程序,如果我能避免它,因为性能原因,以及肛门retentativeness原因:) IE这不是如何创建文本文件的问题,而是如何迫使每一个文本文件中的回购只具有LF类。

可以git的配置改变所有行结束LF,即使这些文件在它们与CR承诺?

我在Windows下使用TortoiseGit和msysgit(和一点点TortoiseSVN的上侧)互换,而我学习的git,如果该事项。

Answer 1:

Git的似乎并不支持CR行尾,所以我会写一个过滤器的换行转换。 在工作树中的文件将有完整的CR行结束,他们将被透明地转换它们被索引时LF。 该过滤器由两个部分组成:“干净”检查中的文件,而“弄脏”检查文件出来。

在使用这个.git/config

[filter "cr"]
    clean = tr '\\r' '\\n'
    smudge = tr '\\n' '\\r'

.git/info/attributes (或.gitattributes是否应该版本)

* filter=cr

请注意,这会自动进行git-diff高兴,因为它会用“干净”版本。

请记住模式设置为只需要,或二进制文件将被损坏,所有的文本文件将检查与CR行结尾的文件。

还要注意的是,如果没有配置过滤器,它会默默地消失,所以建立资料库的新副本时添加配置行。



Answer 2:

FWIW,我结束了转换行结束LF对事物的本地端。 它结束了简单的/ bug更少的解决方案。



文章来源: git and CR vs LF (but NOT CRLF)
标签: git newline lf