La maggior parte delle risposte qui sono state complicate dall'analisi dell'output di git branch -r
. È possibile utilizzare il for
ciclo seguente per creare i rami di tracciamento contro tutti i rami sul telecomando in questo modo.
Esempio
Di 'che ho questi rami remoti.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Conferma che non stiamo monitorando altro che master, a livello locale:
$ git branch -l # or using just git branch
* master
Puoi utilizzare questo solo rivestimento per creare i rami di tracciamento:
$ 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.
Ora conferma:
$ git branch
development
integration
* master
production
staging
Per eliminarli:
$ 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 si utilizza l' -vv
interruttore per git branch
è possibile confermare:
$ 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 ....
Ripartizione di for loop
Fondamentalmente il loop chiama il comando git branch -r
, filtrando qualsiasi HEAD o rami master nell'output usando grep -vE "HEAD|master"
. Per ottenere i nomi dei soli rami meno la origin/
sottostringa usiamo la manipolazione delle stringhe di Bash ${var#stringtoremove}
. Ciò rimuoverà la stringa "stringtoremove" dalla variabile $var
. Nel nostro caso stiamo rimuovendo la stringa origin/
dalla variabile $i
.
NOTA: in alternativa puoi usare anche git checkout --track ...
per fare questo:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Ma non mi interessa particolarmente questo metodo, dal momento che ti sta cambiando tra i rami mentre esegue un checkout. Al termine, ti lascerà sull'ultimo ramo creato.
Riferimenti
git checkout --track origin/branchname