Я использую следующую команду, чтобы узнать, существует ли локальная ветвь git с branch-name
моим репозиторием. Это верно? Есть ли способ лучше?
Обратите внимание, что я делаю это внутри скрипта. По этой причине я хотел бы использовать сантехнические команды, если это возможно.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Маной Говиндан
источник
источник
git branch | grep -w <branch-name>
. Хорошо, это фарфоровая команда, но я не могу себе представить, что это конкретное использование будет существенно изменено в будущем, чтобы сделать этот фрагмент непригодным для использования ...git rev-parse --verify <branch_name>
проверяет также другие ссылки, такие как теги и хеши коммитов, поэтому, хотя он может быть более подходящим для того, что вам нужно, он вернет ложные срабатывания, если вас интересуют только именно ветки.Ответы:
Насколько я знаю, это лучший способ сделать это в сценарии. Я не уверен, что к этому можно добавить намного больше, но может быть и один ответ, который просто говорит: «Эта команда делает все, что вы хотите» :)
Единственное, о чем вы можете позаботиться, это то, что в именах ветвей могут быть удивительные символы, поэтому вы можете заключить в кавычки
<branch-name>
.источник
<branch-name>
. FWIW Я использую это в сценарии ткани. Я не забуду процитировать переменную.Когда я ищу 'git check, если ветвь существует' в поисковой системе, эта страница является первой, которую я вижу.
Я получаю то, что хочу, но я хотел бы предоставить обновленный ответ, поскольку исходное сообщение было с 2011 года.
По сути, это то же самое, что и принятый ответ, но вам не нужно вводить "refs / heads"
источник
git rev-parse --verify
только говорит вам, если такой объект существует в репо (то есть он вернет 0 для любого значения,<branch_name>
которое переводится в объект любого типа в репо). Он не говорит вам, является ли этот объект ветвью или нет.Почти готово.
Просто пропустите
--verify
и,--quiet
и вы получите или хеш, если ветвь существует, или ничего, если это не так.Присвойте его переменной и проверьте наличие пустой строки.
источник
Я думаю, что вы можете использовать
git show-branch
здесь.Итак, $? == 0 будет означать, что ветвь существует, и вам вообще не нужно копаться в канализационных ссылках / заголовках /. Пока вы не перейдете
-r
на show-branch, он будет работать только на локальных ветках.источник
git show-branch
- это фарфоровая команда. Как я уже сказал в своем вопросе, я бы предпочел не использовать фарфоровые команды в сценарии, если доступны сантехнические эквиваленты. См. Kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
илиgit show-branch refs/remotes/origin/[branch]
.Я рекомендую
git show-ref --quiet refs/heads/$name
.--quiet
означает, что нет вывода, что хорошо, потому что тогда вы можете точно проверить состояние выхода.refs/heads/$name
ограничения для местных филиалов и совпадения с полными именами (в противном случаеdev
будет соответствоватьdevelop
)Использование в скрипте:
источник
Для использования в скрипте:
Это завершится,
0
если и только если<branch-name>
существует как локальная ветвь.Пример:
источник
На пакетном сценарии Windows это немного отличается,
источник
Давайте назовем это
git is_localbranch
(вам нужно добавить псевдоним в.gitconfig
).Использование:
Источник:
источник
Результатом проверки моего «Предложенного изменения» на «Обновление» первоначального вопроса было «Это должно было быть написано как комментарий или ответ», поэтому я публикую его здесь:
Другой способ предложил не только проверить ветви , но все ссылки с таким именем @jhuynh .
Объяснение проблемы с «Обновлением» при первоначальном вопросе:
Предположим и проверим, что 'master.000' является только тегом, такой локальной ветки не существует, grep возвращает одну запись, которая является тегом. Тем не менее rev-parse вернет 0, если ссылка существует, даже если такая локальная ветвь не существует. Это ложное совпадение, точно как упомянуто @ paul-s
источник
источник
Да, есть один.
См. Https://git-scm.com/docs/git-rev-parse, где вы можете найти набор аргументов и функцию.
источник
Ни то,
git show-ref
ни другое неgit rev-parse
работает в моем случае.Я закончил с этим
Вы также можете сделать с файлом сценария
источник
Если вам удастся включить grep.
источник
grep
как метасимвол.abc
будет соответствовать, если есть ответвлениеabcdef
.Для использования в скрипте я рекомендую следующую команду:
Обратите внимание, что это
<repo_url>
может быть просто "." указать локальное репо, если вы находитесь внутри его структуры каталогов, пути к локальному репо или адреса удаленного репо.Команда возвращает 0, если
<branch_name>
нет, 1, если присутствует.источник
затем проверьте возвращаемое значение 0 или 1.
источник