Как мне получить только ветку из команды Git?

Возможный дубликат:
Показать только текущую ветку в 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 более лаконичным?


person Phil Hannent    schedule 22.07.2011    source источник


Ответы (3)


Для меня работает следующее:

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

Если вы не находитесь в какой-либо ветке (т.е. вы отсоединили HEAD), тогда это просто вернет HEAD, но это звучит так, как будто в вашем случае использования вы всегда ожидаете быть в ветке.

Обновление: на самом деле это еще проще, вы можете просто сделать: git rev-parse --abbrev-ref HEAD

person Mark Longair    schedule 22.07.2011

Ни одна команда git не предоставит вам только текущую ветку, поэтому вам нужно изменить ее вывод, чтобы извлечь его:

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

Объяснение:

  1. получить список веток
  2. выберите текущую ветку с префиксом *
  3. удалить *
person CharlesB    schedule 22.07.2011

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

Часть sed 's/.*\///' удаляет "ref: refs / heads /" из начала строки.

person Lee Netherton    schedule 22.07.2011