git:如何判断文件是否意外地与CRLF一起提交

时间:2013-12-27 17:05:25

标签: git line-endings

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

1 个答案:

答案 0 :(得分: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?