奇怪的Git行结束问题

时间:2012-07-17 21:23:13

标签: git text github newline

我正在与其他一些人合作编辑一些CSV文件,这些文件存储在Github上的存储库中。我们有使用Windows,OS X和Linux的协作者,因此为了处理行结尾和本地Git设置的差异,我添加了一个.gitattributes文件,其中包含以下内容:

* text=auto

人们正在使用Excel编辑这些CSV文件,然后保存并提交。有时在提交时,文件似乎根本没有行结尾;行由回车(\ n)终止。然后Github将这些文件视为一个大行,并认为整个文件已被删除并被一个长行替换。以下是此类提交的示例:

https://github.com/weecology/neonetods/commit/7e10cb2913ca2e214c49944b4856519cab9bad96

如果您要查看该文件,您会看到每行都以\ r结尾。在Mac和Windows上简单地在Excel中编辑和保存文件后,现在发生了两个人。

这会导致冲突,因为冲突不应该存在冲突,并且很难跟踪每个文件的来源。有没有人知道如何发生这种情况或我们如何解决它?

1 个答案:

答案 0 :(得分:1)

此人:

git and CR vs LF (but NOT CRLF)

有类似的问题。解决方案是使用过滤器,这是不方便的,因为每个人都必须将过滤器定义添加到.git / config,但它应该解决问题。

花了很长时间才弄清楚要使用的适当过滤器,但是:

clean = LC_CTYPE=C awk '{printf(\"%s\\n\", $0)}' | LC_CTYPE=C tr '\\r' '\\n'

...最终为每个人工作。它用\ n替换\ r \ n(因此\ r \ n不会成为\ n \ n),然后将\ r替换为\ n,并处理在Mac上使用tr时产生的一些奇怪的字符编码问题