Estou usando o seguinte comando para descobrir se existe uma ramificação git localbranch-name
no meu repositório. Isso está correto? Existe uma maneira melhor?
Observe que estou fazendo isso dentro de um script. Por esse motivo, eu gostaria de usar comandos de encanamento, se possível.
git show-ref --verify --quiet refs/heads/<branch-name>
# $? == 0 means local branch with <branch-name> exists.
git
git-branch
git-commands
Manoj Govindan
fonte
fonte
git branch | grep -w <branch-name>
. Ok, é um comando de porcelana, mas eu não posso imaginar este uso particular, para haver mudança significativa no futuro, como fazer esse trecho inutilizável ...git rev-parse --verify <branch_name>
também verifica outras referências, como tags e hashes de confirmação, embora seja mais adequado para o que você precisa, retornará falsos positivos se você estiver interessado apenas precisamente em ramificações.Respostas:
Até onde eu sei, essa é a melhor maneira de fazer isso em um script. Não tenho certeza de que há muito mais a acrescentar a isso, mas pode haver uma resposta que apenas diga "Esse comando faz tudo o que você deseja" :)
A única coisa com a qual você deve ter cuidado é que os nomes das filiais podem ter caracteres surpreendentes, portanto, convém citar
<branch-name>
.fonte
<branch-name>
. FWIW Estou usando isso em um script de malha. Vou lembrar de citar a variável.Quando procuro por 'git verifique se existe ramificação' em um mecanismo de pesquisa, esta página é a primeira que vejo.
Consigo o que quero, mas gostaria de fornecer uma resposta atualizada, pois a postagem original era de 2011.
É basicamente o mesmo que a resposta aceita, mas você não precisa digitar "refs / heads /"
fonte
git rev-parse --verify
informa apenas se esse objeto existe no repositório (isto é, retornará 0 para qualquer valor<branch_name>
que se traduza em um objeto de qualquer tipo no repositório). Não diz se esse objeto é um ramo ou não.Quase lá.
Basta deixar o
--verify
e--quiet
e você quer receber o hash se existir o ramo ou nada se isso não acontecer.Atribua-o a uma variável e verifique se há uma sequência vazia.
fonte
Eu acho que você pode usar
git show-branch
aqui.Então $? == 0 indica que a filial existe e você não precisa se aprofundar no encanamento de refs / heads /. Contanto que você não passe
-r
para show-branch, ele funcionará apenas em ramos locais.fonte
git show-branch
é um comando de porcelana . Como disse na minha pergunta, prefiro não usar comandos de porcelana em um script se houver equivalentes de encanamento disponíveis. Veja kernel.org/pub/software/scm/git/docsgit show-branch refs/heads/[branch]
ougit show-branch refs/remotes/origin/[branch]
.Eu recomendo
git show-ref --quiet refs/heads/$name
.--quiet
significa que não há saída, o que é bom, pois você pode verificar o status da saída de maneira limpa.refs/heads/$name
limites para filiais locais e corresponde a nomes completos (caso contráriodev
, corresponderiamdevelop
)Uso em um script:
fonte
Para uso em um script:
Isso sairá
0
se, e somente se,<branch-name>
existir como uma filial local.Exemplo:
fonte
No script em lote do Windows, é um pouco diferente,
fonte
Sim, existe um.
Consulte https://git-scm.com/docs/git-rev-parse, onde você pode encontrar o conjunto de argumentos e a função.
fonte
Vamos chamá-lo
git is_localbranch
(você precisa adicionar o apelido.gitconfig
).Uso:
Fonte:
fonte
O resultado da revisão em minha 'Edição sugerida' para a 'Atualização' na pergunta inicial foi 'Deveria ter sido escrito como um comentário ou uma resposta', por isso estou publicando aqui:
A outra maneira proposta não apenas verificará as ramificações, mas qualquer referência com esse nome @jhuynh .
Problema com uma 'Atualização' na pergunta inicial explicada:
Vamos assumir e verificar se 'master.000' é apenas uma tag, tal filial local não existe, grep retorna uma entrada que é uma tag. Ainda a análise de retorno retornará 0 se a referência existir, mesmo que essa ramificação local não exista. Esta é uma correspondência falsa, exatamente como mencionado por @ paul-s
fonte
fonte
Nem
git show-ref
nemgit rev-parse
funciona no meu caso.Eu acabei com isso
Você também pode fazer com um arquivo de script
fonte
Se você conseguir incluir o grep.
fonte
grep
como um metacaractere.abc
, corresponderá se houver um ramo chamadoabcdef
.Para uso em um script, recomendo o seguinte comando:
Observe que
<repo_url>
pode ser apenas um "." para especificar o repositório local se você estiver dentro de sua estrutura de diretórios, o caminho para um repositório local ou o endereço de um repositório remoto.O comando retorna um 0 se o
<branch_name>
não estiver presente de 1 se presente.fonte
depois verifique se o valor de retorno é 0 ou 1.
fonte