1

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

* text=auto

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

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

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

这会导致不应该发生冲突的冲突,并使跟踪每个文件的出处变得困难。有谁知道这是怎么发生的或者我们如何解决它?

4

1 回答 1

2

这个人:

git 和 CR 与 LF(但不是 CRLF)

有类似的问题。解决方案是使用过滤器,这很不方便,因为每个人都必须将过滤器定义添加到 .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,并处理在 Mac 上使用 tr 时导致的一些奇怪的字符编码问题.

于 2012-07-17T23:05:58.747 回答