管git rev-parse哈希

时间:2018-06-14 10:50:40

标签: git pipe

命令

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

但没有成功,即使这通常是我通过不同命令输出管道时的方式。

2 个答案:

答案 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

就是你所需要的一切。