在Unix或GNU脚本环境(例如,Linux发行版、Cygwin、OSX)中,确定哪个分支当前在工作目录中签出的最佳方法是什么?
这项技术的一个用途是自动标记一个版本(就像svnversion
对Subversion所做的那样)。
请参阅我的相关问题:How to programmatically determine whether a Git checkout is a tag, and if so what is the tag name?
发布于 2009-10-20 09:34:32
正确的解决方案是在__git_ps1
中查看contrib/completions/git-completion.bash的bash提示符。删除所有额外部分,比如选择如何描述分离的头部情况,即当我们在未命名的分支上时,它是:
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" ||
branch_name="(unnamed branch)" # detached HEAD
branch_name=${branch_name##refs/heads/}
git symbolic-ref用于从符号引用中提取完全限定的分支名称;我们将其用于HEAD,即当前已签出的分支。
替代解决方案可以是:
branch_name=$(git symbolic-ref -q HEAD)
branch_name=${branch_name##refs/heads/}
branch_name=${branch_name:-HEAD}
在最后一行中,我们处理分离的头部情况,使用简单的“头部”来表示这种情况。
增加了11-06-2013
Junio C. Hamano (git维护者)的博客文章,,来自2013年6月10日,更详细地解释了为什么要使用(以及如何使用)。
发布于 2012-08-15 02:27:23
有没有人觉得让Git描述一下你所在的分支有什么不好?
git rev-parse --symbolic-full-name --abbrev-ref HEAD
它可以在$()中使用,并在Bash、Powershell、Perl等中轻松传递。如果您在提交时有多个分支,并且如果您当前不在一个分支上,则它不会被愚弄,它只会返回"HEAD“。
或者,您可以使用
git symbolic-ref --short -q HEAD
这将给你相同的输出,但如果你是分离的,它根本不会返回任何东西。如果你想在分离时出现错误,这是很有用的,只需删除-q即可。
发布于 2013-02-27 20:08:14
您可以使用git name-rev --name-only HEAD
https://stackoverflow.com/questions/1593051
复制相似问题