如何从Git命令获取分支?

时间:2011-07-22 10:37:55

标签: git continuous-integration qmake buildbot monotone

  

可能重复:
  Show just the current branch in Git

我正在将我的单调DVCS转移到git。在我的构建设置中,我有qmake获取当前版本和当前分支(因为它们构建在buildbot上),以便它可以用作定义。

exists(_MTN):DEFINES += BUILDREVISION=\\\"$$system(mtn automate get_base_revision_id)\\\"
else:DEFINES += BUILDREVISION=\\\"NOT \
    BUILT \
    FROM \
    SOURCE \
    REPOSITORY\\\"

# Check which branch we are building
exists(_MTN):DEFINES += BUILDBRANCH=\\\"$$system(mtn au get_option branch)\\\"
else:DEFINES += BUILDBRANCH=\\\"UNKNOWN\\\"

在git我能做到:

exists(.git):DEFINES += BUILDREVISION=\\\"$$system(git rev-parse HEAD)\\\"
else:DEFINES += BUILDREVISION=\\\"NOT \
    BUILT \
    FROM \
    SOURCE \
    REPOSITORY\\\"

# Check which branch we are building
exists(.git):DEFINES += BUILDBRANCH=\\\"$$system(git show-branch --current)\\\"
else:DEFINES += BUILDBRANCH=\\\"UNKNOWN\\\"

我的问题是“git show-branch --current”有一个提交消息和一个新的行字符,我的编译器不喜欢它。我怎样才能让git更简洁?

3 个答案:

答案 0 :(得分:4)

以下适用于我:

$ git rev-parse --symbolic-full-name --abbrev-ref HEAD
master

如果你不在任何分支上(即你已经分离了HEAD),那么这将只返回HEAD,但听起来好像在你的用例中你总是希望在一个分支上。

更新:事实上它更简单,您可以这样做: git rev-parse --abbrev-ref HEAD

答案 1 :(得分:0)

没有git命令只提供当前分支,因此您必须修改其输出以将其解压缩:

git branch --no-color 2> /dev/null | grep "*" | sed s/*\ //
1                                    2          3

说明:

  1. 获取分支列表
  2. 选择当前分支,前缀为*
  3. 删除*

答案 2 :(得分:0)

cat .git/HEAD | sed 's/.*\///'

sed 's/.*\///'部分从行的开头删除“ref:refs / heads /”。