git:如何判断一个文件是否被CRLF意外提交

git:如何判断一个文件是否被CRLF意外提交,git,line-endings,Git,Line Endings,在我的具体案例中,我使用的是git-p4,我想知道git-p4是否在实际提交的对象中使用CRLF提交了文件。不过,总的来说,我想知道如何直接找到答案。换句话说,当我正常签出时,core.autocrlf和.gittributes之类的东西可以修改写入磁盘的内容;我想暂时绕过这个问题 git show HEAD:file.txt > /tmp/here.txt && file /tmp/here.txt 或者使用管道fu避免临时文件: git show HEAD:file.

在我的具体案例中,我使用的是git-p4,我想知道git-p4是否在实际提交的对象中使用CRLF提交了文件。不过,总的来说,我想知道如何直接找到答案。换句话说,当我正常签出时,core.autocrlf和.gittributes之类的东西可以修改写入磁盘的内容;我想暂时绕过这个问题

git show HEAD:file.txt > /tmp/here.txt && file /tmp/here.txt
或者使用管道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)提交的

请参阅,以了解背面标记内零件的说明