命令
git cat-file -p 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
在屏幕上打印上面哈希引用的文件内容,内部只有hello.txt
hello world
。
命令
git rev-parse 3b18e512d
相反,只是通过引用第一个十六进制来获取整个哈希是一个精明的快捷方式。
现在,我如何将git rev-parse
的输出传递给上面的git cat-file -p
?
我试过
git cat-file -p | git rev-parse 3b18e512d
但没有成功,即使这通常是我通过不同命令输出管道时的方式。
答案 0 :(得分:2)
假设你正在使用Bash,你可以说:
git cat-file -p $(git rev-parse 3b18e512d)
如果您希望git-cat-file
从管道中读取其输入,则必须通过--batch
option:
git rev-parse 3b18e512d | git cat-file --batch
请注意,--batch
将打印出对象的原始内容,而-p
会应用一些格式(又名“漂亮的打印“),因此这两个命令不会产生相同的输出。
答案 1 :(得分:2)
git cat-file
仅在批处理模式下接受stdin
(而不是命令行)的输入。
这意味着当命令行中存在--batch
或--batch-check
参数时,但在这种情况下,它会拒绝-p
参数。
git cat-file --batch
在第一行打印对象的散列,类型和大小,后跟对象的内容。 git cat-file --batch-check
仅打印没有内容的元信息(哈希,类型和大小)。
假设您只想要文件内容,可以将git cat-file --batch
的输出传递给tail -n +2
(忽略第一行):
git rev-parse 3b18e512d | git cat-file --batch | tail -n +2
但有趣的是,你甚至不需要运行git rev-parse
因为git cat-file
可以处理部分哈希(它可能在内部调用git rev-parse
的功能):
git cat-file -p 3b18e512d
就是你所需要的一切。