【问题标题】:git: how to tell if a file accidentally was committed with CRLFgit:如何判断文件是否意外使用 CRLF 提交
【发布时间】:2013-12-27 17:05:25
【问题描述】:

在我的具体情况下,我使用的是 git-p4,我想知道 git-p4 是否在实际提交的对象本身中使用 CRLF 提交了文件。不过,总的来说,我想知道如何直接找出答案。换句话说,当我正常结帐时,诸如 core.autocrlf 和 .gitattributes 之类的东西可以修改写入磁盘的内容;我想暂时绕过它。

【问题讨论】:

    标签: git line-endings


    【解决方案1】:
    git show HEAD:file.txt > /tmp/here.txt && file /tmp/here.txt
    

    或者使用 pipe-fu 来避免临时文件:

    git show HEAD:file.txt | file -
    

    编辑:以下方法非常无效,但它们是我最初的答案,所以我将它们留在这里。

    其他可行的方法是git cat-file -p abcd2134 > temp_file.txt,其中 abcd1234 是文件的对象哈希。无论输出什么都应该是提交的逐字文本。我可以打开 temp_file.txt 并查看它的行尾是什么(我使用 vim 来做到这一点)。

    如果您使用 bash,则可以键入以下内容:

    git cat-file -p `git ls-tree HEAD file.txt  | sed 's/.* .* \(.\{40\}\).*$/\1/'` | tr "\r" '!!!!' | grep '!!!!' | wc -l
    

    如果结果为 0,则仅使用 CR 提交文件。如果结果大于零,则出现“\r”,这意味着它是以 dos 格式 (CRLF) 提交的。

    有关反引号内部分的说明,请参阅How to get SHA of file for specific Git commit?

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2018-03-23
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 2016-10-07
      相关资源
      最近更新 更多