如何仅从Git命令获取分支?

如何仅从Git命令获取分支?,git,continuous-integration,qmake,buildbot,monotone,Git,Continuous Integration,Qmake,Buildbot,Monotone,可能重复: 我正在将单调的DVC移动到git。在我的构建设置中,我让qmake获取当前版本和当前分支(因为它们是在buildbot上构建的),以便将其用作define exists(_MTN):DEFINES += BUILDREVISION=\\\"$$system(mtn automate get_base_revision_id)\\\" else:DEFINES += BUILDREVISION=\\\"NOT \ BUILT \ FROM \ SOURCE \

可能重复:

我正在将单调的DVC移动到git。在我的构建设置中,我让qmake获取当前版本和当前分支(因为它们是在buildbot上构建的),以便将其用作define

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更简洁?

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

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

  • 获取分支列表
  • 选择当前分支,前缀为
    *
  • 删除
    *

  • 没有git命令只提供当前分支,因此您必须修改其输出以提取它:

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

  • 获取分支列表
  • 选择当前分支,前缀为
    *
  • 删除
    *
  • sed's/*\/'
    部分从行的开头删除“ref:refs/heads/”


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

    以下内容适用于我:

    $ git rev-parse --symbolic-full-name --abbrev-ref HEAD
    master
    
    如果您不在任何分支上(即,您已经分离了HEAD),那么这将只返回
    HEAD
    ,但在您的用例中,听起来好像您总是希望位于分支上


    更新:事实上,它更简单,您只需执行:
    git rev parse--abbrev ref HEAD
    以下操作对我有效:

    $ git rev-parse --symbolic-full-name --abbrev-ref HEAD
    master
    
    如果您不在任何分支上(即,您已经分离了HEAD),那么这将只返回
    HEAD
    ,但在您的用例中,听起来好像您总是希望位于分支上

    更新:事实上更简单,您只需执行:
    git rev parse--abbrev ref HEAD