git-как получить ветвь по умолчанию?
моя команда чередует использование dev и master в качестве ветви по умолчанию для нескольких репозиториев, и я хотел бы написать сценарий, который проверяет ветвь по умолчанию при входе в каталог.
когда запросы pull открываются в некоторых из этих репозиториев, они либо по умолчанию "dev", либо "master" в качестве цели слияния.
Я понимаю, как установить эту информацию, но не получить ее: https://help.github.com/articles/setting-the-default-branch/
доступна ли команда git для определения ветви по умолчанию для удаленного репозитория?
6 ответов
протестировано с git 2.9.4 (но, возможно, работает в других версиях) в репо, клонированном из Github:
$ git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
master
Я нашел способ определить ветвь по умолчанию, если она не является master.
git remote show [your_remote] | grep "HEAD branch" | cut -d ":" -f 2
я протестировал его с несколькими РЕПО из gitlab, и он работал нормально.
доступна ли команда git для определения ветви по умолчанию для удаленного репозитория?
нет, кажется, нет:
git ls-remote -v https://github.com/<user>/<repo>
это будет список всех ветвей, но не HEAD (который является symref, который обозначает ветку по умолчанию)
аналогично GitHub ссылка API можно перечислить головы, но не будет включать голову, а также.
это работает для меня с Git 2.1.10, используя репозиторий клонированы из GitHub:
git branch -r --points-at refs/remotes/origin/HEAD
основная проблема с этим подходом заключается в том, что он перечисляет каждый удаленная ветка, указывающая на головку; однако выход включает подсказку:
origin/HEAD -> origin/master
origin/master
origin/test123
таким образом, вы можете обработать вывод с помощью grep
или аналогичный, чтобы найти тот, со стрелкой:
git branch -r --points-at refs/remotes/origin/HEAD | grep '\->' | cut -d' ' -f5 | cut -d/ -f2
есть -- short до git symbolic-ref. Поэтому моя любимая команда:
$ git symbolic-ref --short HEAD
master
кажется немного обходным решением, но это, похоже, работает:
$ cat .git/refs/remotes/origin/HEAD
ref: refs/remotes/origin/master