在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。
请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?
在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)"
其他回答
将接受的答案调整为Windows powershell:
Split-Path -Leaf (git symbolic-ref HEAD)
我发现了两种非常简单的方法:
$ git status | head -1 | cut -d ' ' -f 4
and
$ git branch | grep "*" | cut -d ' ' -f 2
如果您正在使用旧的NT命令行,您可以使用以下命令:
@for /f "usebackq" %i in (`git symbolic-ref -q HEAD`) do @echo %~ni
要在批处理文件中使用,你必须将%加倍:
@for /f "usebackq" %%i in (`git symbolic-ref -q HEAD`) do @echo %%~ni
你可以使用 git name-rev—name-only HEAD
有人提到在bash中做不到三个任务…像这样混乱的控制流怎么样:
branch_name="$(b=$(git symbolic-ref -q HEAD); { [ -n "$b" ] && echo ${b##refs/heads/}; } || echo HEAD)"