以下命令的作用是什么?:
git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)
答案应包括:
git rev-parse --short都是一种方法:
应用于 HEAD,它会返回当前签出提交的 SHA1 的简短版本(当 HEAd 分离时,这不一定是分支)
您可以在提交 e3ae4a8613151c93ffce78c674ac91c1ee34eef6, Aug. 2009, Git v1.6.5-rc0中看到它在 git/git 代码库本身中首次使用。
子串扩展表示法是一种 bashism,到目前为止我们还没有采用。
请改用“git rev-parse --short”,因为这也可以处理唯一缩写长度超过 7 个字符的情况。
所以而不是:
${sub1sha1:0:7}
Run Code Online (Sandbox Code Playgroud)
使用:
sub1sha1_short=$(cd clone3/sub1 && git rev-parse --short HEAD)
$sub1sha1_short
Run Code Online (Sandbox Code Playgroud)
您会发现它在2013 年 6 月的提交 e8f21ca,Git v1.8.4-rc0中用于 bash 提示符:
bash 提示:打印唯一的分离 HEAD 缩写对象名称
当根据
$GIT_PS1_DESCRIBE环境变量描述分离的 HEAD 失败时,__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。通过将此命令替换与“main”'
git rev-parse' 执行相结合来避免这种开销,以获取目录和 co 的路径.git。
这意味着即使没有必要,我们也会查找缩写的提交对象名称,因为我们位于分支上或者可以描述分离的 HEAD。
不过,这并不重要,因为一旦’git rev-parse”启动并运行以完成所有其他查询,查找缩写提交对象名称的额外开销就无法测量,因为它在噪音中丢失了。然而,当我们位于未出生的分支上时,有一个警告,因为在这种情况下 HEAD 不指向有效的提交,因此对缩写提交对象名称的查询失败。
因此,“--short HEAD”必须是“git rev-parse”的最后一个选项,以便即使在未出生的分支上也能获取提示的所有其他必要信息。
此外,在这种情况下,并且仅在这种情况下,“git rev-parse”显然不会输出包含缩写的提交对象名称的最后一行,因此我们必须注意仅在“git rev-parse”退出且没有任何错误的情况下才解析它。
| 归档时间: |
|
| 查看次数: |
9852 次 |
| 最近记录: |