Моя команда чередует использование dev и master в качестве ветки по умолчанию для нескольких репозиториев, и я хотел бы написать скрипт, который проверяет ветку по умолчанию при входе в каталог.
Когда запросы на вытягивание открываются в некоторых из этих репозиториев, они по умолчанию имеют значение "dev" или "master" в качестве цели слияния.
Доступна ли команда git для определения ветки по умолчанию для удаленного репозитория?
Ветка по умолчанию - это github, а не git. Ismail Badawi 23.02.2015
Вы можете использовать API GitHub, как в этом вопросе: stackoverflow.com/questions/16500461/ Ismail Badawi 23.02.2015
@IsmailBadawi Правда? При создании локального голого репо и выполнении его клонирования должна быть какая-то логика, определяющая, какая ветка извлечена по умолчанию, верно? bluenote10 16.07.2019
Ни одно из приведенных ниже решений не работает надежно для меня: если я нахожусь в ветке feature, разветвленной из develop, она вернет мне develop, а не master (или main, из которой develop является вилкой)... Любая помощь? user3341592 12.01.2021
Вопрос задан в stackoverflow.com/questions/65703168/ user3341592 13.01.2021
Протестировано с git 2.9.4 (но, возможно, работает и в других версиях) в репозитории, клонированном с Github:
$ git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
master
Ответ 2 · рейтинг 76 · Radon8472
Я нашел способ определить ветку по умолчанию, если она не является главной.
git remote show [your_remote] | sed -n '/HEAD branch/s/.*: //p'
Я протестировал его с несколькими репозиториями из gitlab, и он работал нормально. (в большинстве случаев [your_remote] будет origin, запустите git remote, чтобы проверить имя вашего пульта)
Ответ 3 · рейтинг 18 · Anthony Sottile
Кажется, пока нет ответа, который не требует клонирования.
Для этого требуется git 2.8.0 или новее
$ git ls-remote --symref [email protected]:pre-commit/pre-commit.github.io HEAD
ref: refs/heads/real_master HEAD
e100a6a3c72b4e54f0d176f791dfd2dbd7eb5fa7 HEAD
Ответ 4 · рейтинг 18 · JoeLinux
Этот вопрос немного устарел, но на случай, если кто-то столкнется с этим совсем недавно...
git remote show <remote_name> | awk '/HEAD branch/ {print $NF}'
Это также будет отображать только имя ветки, не включая пробелы или другую чепуху.
Мне нравится сохранять это, используя пару псевдонимов git (у меня есть куча таких полезных псевдонимов):
Я использую "upstream" и "origin" в качестве пультов почти в 100% случаев ("upstream", когда я использую Fork & Pull... что часто бывает). Ваш вариант использования может не нуждаться в псевдониме upstream-name, я просто считаю его полезным.