A maioria das respostas aqui está complicando a análise da saída de git branch -r
. Você pode usar o seguinte for
loop para criar as ramificações de rastreamento em todas as ramificações no controle remoto dessa maneira.
Exemplo
Digamos que eu tenho esses ramos remotos.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Confirme se não estamos rastreando nada além de mestre, localmente:
$ git branch -l # or using just git branch
* master
Você pode usar esse liner para criar as ramificações de rastreamento:
$ for i in $(git branch -r | grep -vE "HEAD|master"); do
git branch --track ${i#*/} $i; done
Branch development set up to track remote branch development from origin.
Branch integration set up to track remote branch integration from origin.
Branch production set up to track remote branch production from origin.
Branch staging set up to track remote branch staging from origin.
Agora confirme:
$ git branch
development
integration
* master
production
staging
Para excluí-los:
$ git br -D production development integration staging
Deleted branch production (was xxxxx).
Deleted branch development (was xxxxx).
Deleted branch integration (was xxxxx).
Deleted branch staging (was xxxxx).
Se você usar a -vv
opção, git branch
poderá confirmar:
$ git br -vv
development xxxxx [origin/development] commit log msg ....
integration xxxxx [origin/integration] commit log msg ....
* master xxxxx [origin/master] commit log msg ....
production xxxxx [origin/production] commit log msg ....
staging xxxxx [origin/staging] commit log msg ....
Repartição do loop for
O loop basicamente chama o comando git branch -r
, filtrando qualquer ramo HEAD ou mestre na saída usando grep -vE "HEAD|master"
. Para obter os nomes apenas dos ramos menos a origin/
substring, usamos a manipulação de strings do Bash ${var#stringtoremove}
. Isto irá remover a seqüência, "stringtoremove" da variável $var
. No nosso caso, estamos removendo a string origin/
da variável $i
.
NOTA: Como alternativa, você também pode git checkout --track ...
fazer isso:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Mas eu particularmente não me importo com esse método, pois ele é alternado entre os ramos enquanto ele faz um checkout. Quando terminar, deixará você no último ramo que ele criou.
Referências
git checkout --track origin/branchname