Scopri il creatore di git branch

Voglio scoprire chi ha creato un ramo.

Sono in grado di farlo con:

git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _ 

Tuttavia, questo restituisce l’ultimo committer per ramo, non necessariamente la persona che ha creato il ramo.

Un ramo non è altro che un puntatore di commit. In quanto tale, non tiene traccia dei metadati come “chi mi ha creato”. Vedi di persona. Prova cat .git/refs/heads/ nel tuo repository.

Detto questo, se vuoi davvero rintracciare queste informazioni nel tuo repository, controlla le descrizioni delle filiali. Ti consentono di albind metadati arbitrari ai rami, almeno a livello locale.

Anche la risposta di DarVar di seguito è un modo molto intelligente per ottenere queste informazioni.

Elenco dei rami Git remoti per autore ordinati per data di registrazione:

 git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n 

Ho ottimizzato le risposte sopra usando il flag –sort e aggiungendo un po ‘di colore / formattazione.

 git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes 

Aggiunta a https://stackoverflow.com/a/19135644/2917986

 git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}' 

PS Abbiamo usato awk per stampare l’autore e il ramo remoto

 git for-each-ref --format='%(authorname) %09 -%(refname)' | sort 

Di chi ha creato un ramo nel tuo repository locale

 git reflog --format=full 

Esempio di output:

 commit e1dd940 Reflog: [email protected]{0} (a ) Reflog message: checkout: moving from master to b2 Author: b  Commit: b  (...) 

Ma questo è probabilmente inutile in quanto tipicamente sul repository locale si creano solo rami.

Le informazioni sono memorizzate in ./.git/logs/refs/heads/ branch . Contenuto di esempio:

 0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a  1438788420 +0200 branch: Created from HEAD 

L’ultimo commit in questo esempio era dell’utente “b” mentre il ramo “b2” è stato creato dall’utente “a”. Se cambi il tuo nome utente puoi verificare che git reflog prenda le informazioni dal log e non usi l’utente locale.

Non conosco alcuna possibilità di trasmettere le informazioni del registro locale a un repository centrale.

assumendo:

  1. ramo è stato fatto dal master
  2. non è stato ancora unito al master

  git log --format="%ae %an" master.. | tail -1 

Per quanto ne so, potresti vedere se sei il creatore di un solo ramo. Questo è indicato dalla prima riga in .git / ref / heads / . Se termina con “Creato da TESTA”, sei il creatore.

So che questo non è interamente lo scopo della domanda, ma se trovi la necessità di filtrare solo commit di uno specifico autore, puoi sempre passare a grep 🙂

 # lists all commits in chronological order that # belong to the github account with # username `MY_GITHUB_USERNAME` (obviously you # would want to replace that with your github username, # or the username you are trying to filter by) git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -committerdate | grep 'MY_GITHUB_USERNAME' 

felice codifica! 🙂