git cat文件输出

git cat文件输出,git,msysgit,Git,Msysgit,当我在提交时运行git cat file--batch时,它输出“missing…”,但提交确实存在。为什么会发生这种情况?当使用-t开关运行cat文件时,它只输出“commit”,这正是我所期望的。有人能解释一下吗?我是git的新手。谢谢 编辑:我已经找到了原因。msysgit需要LF,而ENTER生成CRLF我不确定git cat文件--批处理应该按照您在问题中提到的方式工作。 (可能在2016年3月git 2.8之后,见下文) 即使在unix环境中的“”中,也会像注释中提到的那样使用git

当我在提交时运行git cat file--batch时,它输出“missing…”,但提交确实存在。为什么会发生这种情况?当使用-t开关运行cat文件时,它只输出“commit”,这正是我所期望的。有人能解释一下吗?我是git的新手。谢谢


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

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

即使在unix环境中的“”中,也会像注释中提到的那样使用
git cat文件

通过键入以下内容,检查此文件是否确实包含上述内容:


正如OP上面提到的,这是一个问题:
git命令总是使用
LF
(换行符,U+000A),而不是Windows
CRLF
CR
+
LF
CR
(U+000D)然后是
LF
(U+000A))序列。
对于“
|
”,它使用bash msysgit shell(
LF
)的
EOL
字符,因此它总是有效的


注意:Git 2.5+(2015年第2季度)将添加对带有
Git cat文件的符号链接的支持--批处理

(新的Git版本可在windows上获得)

2015年5月20日,见 (于2015年6月1日被合并)

cat文件
:添加
--遵循符号链接
--批处理
git cat file--batch(-check)
”学习了“
--follow symlinks
”选项,该选项在被问到有关 对象通过扩展的SHA-1语法

例如,
HEAD:RelNotes
指向
Documentation/RelNotes/2.5.0.txt

使用新选项时,命令的行为就好像输入了
HEAD:Documentation/RelNotes/2.5.0.txt


2016年2月更新:

Git 2.8将对CRLF的支持添加到一些Git命令中:

参见,,,,(2015年10月28日)作者。
(于2016年2月3日被合并)

特别是,使用(可以使用
LF
NUL
以外的字节作为行终止符)

使用git 2.8:

cat文件
:使用strbuf\u getline()读取批处理流
可以使用DOS编辑器准备文本文件并将其馈送 作为批处理命令流发送到命令


您是否将输入传递到git cat文件——使用标准输入进行批处理?它不希望commit作为命令行参数。我尝试了“echo | git cat file--batch”,结果很管用。也许可以检查一下你通过stdin发送的输入是什么样子的like@sinelaw:是的。首先,我运行git cat file——批处理,不带参数,然后它等待输入,然后输入commit SHA1。我尝试了你的echo方法,它工作了…我发现git cat文件--批处理在Windows上不工作。我试过Ubuntu,我的方式没有问题。。。也许这只与git的windows版本有关。非常好。我已经在下面的回答中包含了你的结论。我只是查看了cat file命令的源代码,它只是从“stdin”读取输入,所以我认为,它应该以我的方式工作。@Alex:那么,作为msysgit Windows上的stdin问题吗?也许,我不是很确定。我会在其他机器上测试这个问题,如果仍然发生这种情况,我会发布一个缺陷报告。我刚刚提交了这个问题,无论它是被确认还是被拒绝,我都会更新这个帖子。
$ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch