奇怪的Git行结束问题

奇怪的Git行结束问题,git,text,github,newline,Git,Text,Github,Newline,我正在与其他一些人合作编辑一些CSV文件,这些文件存储在Github的存储库中。我们有使用Windows、OS X和Linux的合作者,因此为了处理行尾和本地Git设置的差异,我添加了一个.gittributes文件,其中包含以下内容: * text=auto 人们使用Excel编辑这些CSV文件,然后保存和提交。有时在提交时,文件似乎根本没有行尾;行由回车符(\r)终止。Github然后将这些文件视为一行,并认为整个文件已被删除并替换为一行。以下是此类提交的一个示例: 如果要签出该文件,您

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

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

如果要签出该文件,您会看到每一行都以一个\r\n结尾。这发生在两个人身上,他们只是在Mac和Windows上用Excel编辑并保存了文件

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

此人:

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

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

clean = LC_CTYPE=C awk '{printf(\"%s\\n\", $0)}' | LC_CTYPE=C tr '\\r' '\\n'
…这就是最终对每个人都有用的东西。它将\r\n替换为\n(以便\r\n不会变成\n\n),然后将\r\n替换为\n,并处理在Mac上使用tr时产生的一些奇怪字符编码问题