GNU/Linux >> Linux Esercitazione >  >> Linux

Come ottenere il nome dell'attuale ramo git in una variabile in uno script di shell?

Il * è espanso, quello che puoi fare è usare sed invece di grep e ottenere immediatamente il nome del ramo:

branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p')

E una versione che utilizza git simbolico-ref, come suggerito da Noufal Ibrahim

branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

Per approfondire l'espansione, (come ha già fatto marco) l'espansione avviene nell'eco, quando si fa echo $test con $test contenente * master poi il * viene espanso secondo le normali regole di espansione. Per sopprimere questo si dovrebbe citare la variabile, come mostrato da marco:echo "$test" . In alternativa, se elimini l'asterisco prima di ripeterlo, andrà tutto bene, ad es. echo ${test:2} echeggerà solo master . In alternativa puoi assegnarlo di nuovo come hai già proposto:

branch=${test:2}
echo $branch

Questo farà eco a master , come volevi.


Userei git-symbolic-ref comando nel core git. Se dici git-symbolic-ref HEAD , otterrai il nome del ramo corrente.


Espandendo la risposta di Noufal Ibrahim, usa --short flag con git-symbolic-ref , non c'è bisogno di agitarsi con sed .

Sto usando qualcosa di simile negli hook e funziona bene:

#!/bin/bash

branch=$(git symbolic-ref --short HEAD)

echo
echo "**** Running post-commit hook from branch $branch"
echo

Viene visualizzato "**** Running post-commit hook from branch master"

Nota che git-symbolic-ref funziona solo se sei in un repository. Fortunatamente .git/HEAD , come residuo dei primi giorni di Git, contiene lo stesso riferimento simbolico. Se vuoi ottenere il ramo attivo di diversi repository git, senza attraversare le directory, puoi usare un one-liner bash come questo:

for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} :  ${branch##*/}; done

Che produce qualcosa come:

repo1 : master  
repo2 : dev  
repo3 : issue12

Se vuoi andare oltre, il riferimento completo contenuto in .git/HEAD è anche un percorso relativo a un file contenente l'hash SHA-1 dell'ultimo commit del ramo.


Linux
  1. Come ottenere il nome della distribuzione e il numero di versione in un semplice script di shell?

  2. Come ottenere l'indirizzo IP esterno in uno script di shell?

  3. Come passare un argomento della riga di comando in uno script di shell?

  4. Come faccio a conoscere il nome del file di script in uno script Bash?

  5. Come memorizzare un comando in una variabile in uno script di shell?

Come memorizzare un comando Linux come variabile nello script della shell

Come cambiare la lingua del mio git?

Come ottenere il codice di uscita del processo generato nello script di shell atteso?

Come ottenere il sistema operativo corrente in MSBuild?

Come ottenere la risoluzione corrente del monitor o il nome del monitor (LVDS, VGA1, ecc.)

Come posso ottenere il nome della distribuzione e il numero di versione in un semplice script di shell?