当我在提交时运行git cat-file --batch时,它输出'missing ...',但提交确实存在。为什么会这样?当使用-t开关运行cat-file时,它只输出'commit',这是我的预期。任何人都能解释一下吗?我是git的新手。感谢。
编辑:我已经找到了原因。 msysgit需要 LF ,而ENTER生成 CRLF 。
答案 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
+ LF
:CR
(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 a551843,commit 933bea9,commit 1536dd9,commit b42ca3d,commit 692dfdf,commit 3f16396,commit 18814d0,{{3} },commit 1f3b1ef,commit 72e37b6,commit 6e8d46f(2015年10月28日)commit c0353c7。
(Junio C Hamano (gitster
)于2016年2月3日Junio C Hamano -- gitster
--合并)
特别是,commit 0175655使用commit b42ca3d(可以使用除LF
或NUL
之外的字节作为行终止符)
使用git 2.8:
读取批处理流
cat-file
:使用strbuf_getline()
可以使用DOS编辑器准备文本文件并将其提供 作为命令的批处理命令流。