【问题标题】:Strange Git line ending issue奇怪的 Git 行尾问题
【发布时间】:2012-07-17 21:23:13
【问题描述】:

我正在与其他几个人合作编辑一些 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 中编辑和保存文件后,现在有两个人发生了这种情况。

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

【问题讨论】:

    标签: git text github newline


    【解决方案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'
    

    ...最终对每个人都有效。它将 \r\n 替换为 \n(这样 \r\n 不会变为 \n\n),然后将 \r 替换为 \n,并处理在 Mac 上使用 tr 时导致的一些奇怪的字符编码问题.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-07
      • 2011-07-02
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多