在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?

这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。

请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?


当前回答

有人提到在bash中做不到三个任务…像这样混乱的控制流怎么样:

branch_name="$(b=$(git symbolic-ref -q HEAD); { [ -n "$b" ] && echo ${b##refs/heads/}; } || echo HEAD)"

其他回答

我发现了两种非常简单的方法:

$ git status | head -1 | cut -d ' ' -f 4

and

$ git branch | grep "*" | cut -d ' ' -f 2

我在这里尝试最简单和最不言自明的方法:

git status | grep "On branch" | cut -c 11-

你可以使用 git name-rev—name-only HEAD

这个适合我。如果您希望返回纯字符串,那么——no-color部分非常重要。

git branch --no-color | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'

这是一个解。如果您将它添加到.bashrc中,它将在控制台中显示当前分支。

# git branch
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
$PS1="\$(parse_git_branch)$PS1"

然而,这是相当有限的。但是有一个叫做git sh的伟大项目,它正在做这些事情(甚至更多)。