i comandi di git: for-each-ref
Il mio strumento di versioning preferito è proprio git
se non lo aveste
capito; la bellezza di questo tool sta proprio nella sua versatilità e nella
suo essere toolbox, una scatola degli attrezzi pronta all'uso per il versioning
dei propri progetti software. Con questo post inizio una carrellata sui comandi
di git
, magari più ignoti che potrebbero servirvi nel vostro lavoro di
sviluppo.
Il comando che andremo a vedere si chiama for-each-ref
e già il nome può
darci indicazioni cosa si può ottenere da esso: una lista di tutto le referenze
del nostro repository, selezionando eventualmente un pattern particolare (solo
le tags per esempio).
Non c'è molto da spiegare se non vedere l'help presente
$ git for-each-ref -h usage: git for-each-ref [options] [<pattern>] -s, --shell quote placeholders suitably for shells -p, --perl quote placeholders suitably for perl --python quote placeholders suitably for python --tcl quote placeholders suitably for tcl --count <n> show only <n> matched refs --format <format> format to use for the output --sort <key> field name to sort on
ed un possibile script di esempio che esegua, in un repository contenente un
progetto Django, gli unit tests per ognuno dei branch e ci stampi alla fine il
codice di uscita del test e la referenza a cui si riferisce, ordinandole per
risultato (attenzione che alla fine ci si ritrova con una detached HEAD
)
git for-each-ref refs/heads | while read hash type ref do git checkout $hash 2>/dev/null python manage.py test >/dev/null 2>&1 echo $ref $? done | sort -k2,2
Un output può essere il seguente
refs/heads/backup 0 refs/heads/fix-comma 0 refs/heads/lighttpd 0 refs/heads/make-tex-from-post 0 refs/heads/archeology 1 refs/heads/archives 1 refs/heads/better-500-page 1 refs/heads/export 2
Utile se si vuole tenere sott'occhio quali branch hanno bisogno di lavoro.
Un altro modo di utilizzare questo comando è di trovare a quale branch corrisponde un dato commit: dentro uno script bash definite la sequente funzione
find_ref () { git for-each-ref refs/heads | while read sha1 type ref; do if [ "$sha1" == "$1" ] then echo $ref fi done }
a questo punto potete passare lo sha1 a 40 cifre a questa funzione e trovare il path completo all'interno del namespace delle referenze a cui corrisponde quella. Unico problema è che se ci sono più branch che puntano allo stesso commit non c'è modo di disambiguarli.
Comments
Comments powered by Disqus