Как я могу надежно проанализировать вывод git branch, чтобы захватить только имя ветки? - PullRequest
1 голос
/ 30 апреля 2019

Я запускаю автоматические тесты, когда происходит переход на GitHub.

Когда я настраиваю репо для тестирования, я могу запустить:

git branch -a --contains <<commit id>>

, чтобы определить, какие ветви могут зафиксировать коммитсуществовать в.

Git производит вывод наподобие:

remotes/origin/MEM-5286-partner-video-update01
remotes/origin/MEM-5286-partner-video-update02

Может кто-нибудь предложить подход, использующий bash, для захвата имен ветвей (MEM-5286-partner-video-update01, MEM-5286-partner-video-update02) с концавыходные строки?

Я могу загрузить массив bash с результирующими строками, но потерпел неудачу, пытаясь использовать sed и / или regex для захвата только названий ветвей.Похоже, что не существует опции git для удаления префикса remotes / origin.

Буду признателен за любые мысли о подходе.

Ответы [ 2 ]

4 голосов
/ 01 мая 2019

Вы можете использовать опцию --format, документация для которой находится под for-each-ref:

git branch -a --contains <commit_id> --format='%(refname:short)'

refname:short Git 1.6.1 .

1 голос
/ 30 апреля 2019

Использование родного git.Вы можете открыть справочную страницу для git-for-each-ref, чтобы увидеть атомы, которые можно использовать в опции --format, но вкратце вы можете запросить самую правую часть refname (имя ветви), используя:

git branch -a --contains <<commit id>> --format "%(refname:lstrip=-1)"

При желании можно использовать awk (что не срабатывает, если имя ветви содержит косую черту):

git branch -a --contains <<commit id>> | awk -F"/" '{print $NF}'

, которая разбивает входящие строки на "/" и затем печатает последнее поле print $NF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...