git-cat-file输出

时间:2011-01-14 07:12:10

标签: git msysgit

当我在提交时运行git cat-file --batch时,它输出'missing ...',但提交确实存在。为什么会这样?当使用-t开关运行cat-file时,它只输出'commit',这是我的预期。任何人都能解释一下吗?我是git的新手。感谢。

编辑:我已经找到了原因。 msysgit需要 LF ,而ENTER生成 CRLF

1 个答案:

答案 0 :(得分:3)

我不确定 git cat-file --batch 应该按照您在问题中提到的方式工作。
(可能在git 2.8之后,2016年3月,见下文)

即使在“GitMagic book”中,在unix环境中,git cat-file的使用方式与评论中的sinelaw类似:

  

通过输入以下内容检查此文件确实包含上述​​内容:

$ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch

正如上面提到的OP Alex.Shen,这是一个newline问题:
git命令总是期望 LF (换行,U + 000A),而不是Windows CRLF CR + LFCR(U + 000D)后跟LF(U + 000A))序列。
使用“|”时,它使用bash msysgit shell(EOL)的LF字符,因此它始终有效。


注意:Git 2.5 +(2015年第2季度)将添加对git cat-file --batch的符号链接的支持 (新的Git版本适用于github.com/git-for-windows/git/releases

的窗口

2015年5月20日commit 122d534旁边的David Turner (csusbdt) (由Junio C Hamano -- gitster --合并于commit 67f0b6f,2015年6月1日)

  

cat-file:将--follow-symlinks添加到--batch

     

git cat-file --batch(-check)”在被问及有关一个树内符号链接时,学习了“--follow-symlinks”选项   对象通过扩展的SHA-1语法。

     

E.g。 HEAD:RelNotes指向Documentation/RelNotes/2.5.0.txt

     

使用新选项,该命令的行为就好像HEAD:Documentation/RelNotes/2.5.0.txt作为输入一样。


2016年2月更新:

Git 2.8为某些git命令添加了对CRLF的支持:

请参阅commit a551843commit 933bea9commit 1536dd9commit b42ca3dcommit 692dfdfcommit 3f16396commit 18814d0,{{3} },commit 1f3b1efcommit 72e37b6commit 6e8d46f(2015年10月28日)commit c0353c7

Junio C Hamano (gitster)于2016年2月3日Junio C Hamano -- gitster --合并)

特别是,commit 0175655使用commit b42ca3d(可以使用除LFNUL之外的字节作为行终止符)

使用git 2.8:

  

cat-file:使用strbuf_getline()

读取批处理流      

可以使用DOS编辑器准备文本文件并将其提供   作为命令的批处理命令流