在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。
请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?
在Unix或GNU脚本环境(例如Linux发行版、Cygwin、OSX)中,确定当前在工作目录中签出哪个Git分支的最佳方法是什么?
这种技术的一个用途是自动标记版本(就像svnversion对Subversion所做的那样)。
请参阅我的相关问题:如何以编程方式确定Git签出是否是标记,如果是,标记的名称是什么?
当前回答
如果你正在使用gradle,
```
def gitHash = new ByteArrayOutputStream()
project.exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = gitHash
}
def gitBranch = new ByteArrayOutputStream()
project.exec {
def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e '2,\$d' -e 's/\\(.*\\)\\/\\(.*\\)\$/\\2/' || echo 'master'"
commandLine "bash", "-c", "${gitCmd}"
standardOutput = gitBranch
}
```
其他回答
有人觉得让Git描述你所在的分支有什么不对吗?
git rev-parse --symbolic-full-name --abbrev-ref HEAD
它可以在$()中使用,并且可以在Bash、Powershell、Perl等中轻松传递。如果你在提交过程中有几个分支,它不会被愚弄,如果你目前不在一个分支上,它会简单地返回“HEAD”。
或者,您可以使用
git symbolic-ref --short -q HEAD
它会给你相同的输出,但如果你是分离的,它根本不会返回任何东西。如果你想在分离时出现错误,这个选项很有用,只需要删除-q。
从这个答案:https://stackoverflow.com/a/1418022/605356:
$ git rev-parse --abbrev-ref HEAD
master
显然适用于Git 1.6.3或更新版本。
我在这里尝试最简单和最不言自明的方法:
git status | grep "On branch" | cut -c 11-
将接受的答案调整为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