Я думаю, что вы можете пройти большую часть пути без perl
или awk
, указав формат для git вывода ветви . Обратите внимание, что $REPONAME
интерполируется оболочкой, потому что я использую строку в двойных кавычках. Материал в %(...)
является частью git
форматирования:
$ export REPONAME=bin
$ git branch --format "%(upstream:track) --> $REPONAME [%(refname:short)] %(objectname:short=6)" | grep '^\['
[behind 15] --> bin [master] 5b1e08
Я не очень много работал над этим, чтобы избавиться от строк, где ветка актуальна, поэтому я наказывается до grep
.
$ git branch --format "%(upstream:track) --> $REPONAME [%(refname:short)] %(objectname:short=6)"
--> bin [a] 5b1e08
--> bin [briandfoy/how-to-install-perl] 1d7456
[behind 15] --> bin [master] 5b1e08
Вы можете добавить логи c, но я не дошел до того, что не выводил пустые строки:
$ git branch --format "%(if)%(upstream:track)%(then)%(upstream:track) --> $REPONAME [%(refname:short)] %(objectname:short=6)%(else)%(end)"
[behind 15] --> bin [master] 5b1e08
Но, думаю, в вашем комментарий к ikegami Вы хотели, чтобы в современных ветках было "ОК". Измените if-then-else
, чтобы он охватывал только первый столбец, и всегда выводите остальные:
$ git branch --format "%(if)%(upstream:track)%(then)%(upstream:track)%(else)OK%(end) --> $REPONAME [%(refname:short)] %(objectname:short=6)"
OK --> bin [a] 5b1e08
OK --> bin [briandfoy/some_feature] 1d7456
[behind 15] --> bin [master] 5b1e08
Если вам нужна какая-то другая строка для несинхронных ветвей c, просто измените эту ветвь if-then-else
:
$ git branch --format "%(if)%(upstream:track)%(then)Out of sync%(else)OK%(end) --> $REPONAME [%(refname:short)] %(objectname:short=6)"
OK --> bin [a] 5b1e08
OK --> bin [briandfoy/some_feature] 1d7456
Out of sync --> bin [master] 5b1e08
Вы можете поместить весь формат в его собственную переменную, но вы должны быть осторожны с этим, потому что он интерполирует $REPONAME
. Вам придется установить $FORMAT
на репо. Я думаю, что это немного легче переварить:
$ export FORMAT="%(if)%(upstream:track)%(then)%(upstream:track)%(else)OK%(end) --> $REPONAME [%(refname:short)] %(objectname:short=6)"
$ git branch --format "$FORMAT"