git rev-parse --short
既可以用来:
应用于HEAD时,它会返回当前检出提交的SHA1的短版本(当HEAd分离时,这不一定是一个分支)
您可以在Git v1.6.5-rc0中的commit e3ae4a8613151c93ffce78c674ac91c1ee34eef6中首次看到其在git/git代码库中的使用。
子字符串扩展符号是一种我们迄今尚未采用的Bashism。
请改用'git rev-parse --short',因为它还处理唯一缩写超过7个字符的情况。
所以,不要使用以下方式:
${sub1sha1:0:7}
使用:
sub1sha1_short=$(cd clone3/sub1 && git rev-parse --short HEAD)
$sub1sha1_short
您可以在
commit e8f21ca, 2013年6月, Git v1.8.4-rc0 中找到它的使用,用于bash提示符中打印唯一的分离头缩写对象名称。当按照$GIT_PS1_DESCRIBE环境变量描述分离头失败时,__git_ps1() 运行 cut -c1-7 .git/HEAD 在提示符中显示 7 个十六进制缩写提交对象名称。显然,这既不尊重core.abbrev,也不会生成唯一的对象名称。通过使用“git rev-parse --short HEAD”来解决此问题,并调整相应的测试以使用非标准数量的十六进制数字。因为--short将计算SHA的最小长度以使其不含糊不清,所以它应该是git rev-parse使用的最后一个选项。
请查看提交 e3e0b93,也是2013年6月,Git v1.8.4-rc0
bash提示符:将'git rev-parse'与分离头合并
当使用环境变量
$GIT_PS1_DESCRIBE
描述脱离HEAD时失败时,
__git_ps1()
现在运行'
$(git rev-parse --short HEAD)
'命令替换以获取缩写的脱离HEAD提交对象名称。
这会导致fork()一个子shell和fork()+exec()一个
git
进程的开销。
通过将此命令替换与“主”'
git rev-parse
'执行结合起来以获取
.git
目录和其他内容的路径来避免这种开销。
这意味着即使不需要,我们也会查找缩写的提交对象名称,因为我们处于分支上或可以描述脱离HEAD。
然而,这并不重要,因为一旦'
git rev-parse
'启动并运行以满足所有其他查询,查找缩写的提交对象名称的额外开销就不可测量,因为它在噪音中丢失了。
但是,有一个注意点,当我们处于未出生的分支上时,因为在这种情况下HEAD没有指向有效的提交,所以查询缩写的提交对象名称会失败。
因此,在任何情况下,'
--short HEAD
'都必须是'
git rev-parse
'的最后选项,以便即使在未出生的分支上也可以获取所有其他必要的提示信息。
此外,在这种情况下,仅在'
git rev-parse
'没有任何错误退出时才解析它,因为只有在这种情况下'
git rev-parse
'不会输出包含缩写提交对象名称的最后一行。