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