git rev-parse是做什么的?

git rev-parse做什么的?

我已阅读手册页,但提出了更多的问题,而不是答案。 像:

挑出并按摩参数

按摩 ? 那是什么意思?

我用作parsing器(对SHA1)的修订说明符,如

 git rev-parse HEAD^ 

要么

 git rev-parse origin/master 

这是命令的目的吗? 如果没有,甚至正确地使用它来实现这一目标?

git rev-parse是一个主要用于操作的辅助plumbing命令。

git rev-parse一个常见用法是给出一个修订说明符来打印SHA1哈希。 此外,它还有各种选项来格式化此输出,例如--short打印较短的唯一SHA1。

还有其他的用例(在git之上构build的脚本和其他工具中),我用它们:

  • – validation确认指定的对象是一个有效的git对象。
  • --git-dir显示.git目录的绝对/相对path。
  • 使用--is-inside-git-dir或在工作树内使用--is-inside-work-tree检查当前是否在存储库中
  • 使用--is-bare-repository检查回购是否裸露
  • 打印SHA1散列的分支( – --branches ),标签( – --tags )和裁判也可以基于远程过滤(使用--remote
  • --parse-opt在脚本中对参数进行规范化(类似于getopt )并打印一个可以与eval一起使用的输出string

Massage只是意味着可以将信息从一种forms转换为另一种forms,即转换命令。 这些是我能想到的一些简单的例子:

  • 一个分支或标签名称放入到它所指向的提交的SHA1中,以便它可以被传递给只接受提交的SHA1值的pipe道命令。
  • 修改范围A..B用于将git loggit diff作为底层pipe道命令的等价参数作为B ^A

为了详细说明命令名称rev-parse的词源,Git在“plumbing命令”中一直使用术语“ rev ”作为“revision”的缩写,通常表示提交的40个字符的SHA1哈希。 例如命令rev-list打印一个分支的40个字符提交哈希列表或其他。

在这种情况下,名称可能会扩展为parse-a-commitish-to-a-full-SHA1-hash 。 虽然该命令具有Tuxdude答案中提到的几个辅助function,但它的同名似乎是将用户友好的引用(如分支名称或缩写的散列)转换为明确的40个字符的SHA1散列(对于许多编程/pipe道工程最为有用)目的。

我知道我认为这是“逆向分析”的东西一段时间之后,我才明白,并有同样的麻烦理解术语“按摩”和“操纵”:)

无论如何,我觉得这个“修正parsing”的概念是一个令人满意的思考方式,也是一个可靠的概念,当我需要这样的事情的时候能够把这个命令带入脑海。 通常在编写Git脚本时,您会将用户友好的提交引用作为用户input,通常希望尽快将其parsing为validation且明确的工作引用。 否则input翻译和validation往往会通过脚本激增。

git rev-parse同样适用于使用–abbrev-ref标志获取当前分支名称,例如:

 git rev-parse --abbrev-ref HEAD