Ich möchte herausfinden, wer einen Zweig gegründet hat.
Ich kann das irgendwie mit:
git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
Dies gibt jedoch den letzten Committer pro Zweig zurück, nicht unbedingt die Person, die den Zweig erstellt hat.
Ein Zweig ist nichts anderes als ein Commit-Zeiger. Daher werden keine Metadaten wie "Wer hat mich erstellt?" Erfasst. Überzeugen Sie sich selbst. Versuchen Sie cat .git/refs/heads/<branch>
in Ihrem Repository.
Wenn Sie diese Informationen in Ihrem Repository wirklich nachverfolgen möchten, lesen Sie die branch Beschreibungen aus. Damit können Sie beliebige Metadaten lokal an Zweigstellen anhängen.
Auch DarVars Antwort unten ist eine sehr clevere Methode, um an diese Informationen zu kommen.
Liste der Remote-Git-Zweige nach Autor sortiert nach Datum:
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n
Ich habe die obigen Antworten mit dem Flag --sort angepasst und Farbe/Formatierung hinzugefügt.
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
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
Hinzufügen zu 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}'
P.S. Wir haben awk verwendet, um den Autor und den entfernten Zweig zu drucken
Sie können herausfinden, wer in Ihrem local - Repository einen Zweig erstellt hat
git reflog --format=full
Beispielausgabe:
commit e1dd940
Reflog: [email protected]{0} (a <[email protected]>)
Reflog message: checkout: moving from master to b2
Author: b <b.none>
Commit: b <b.none>
(...)
Dies ist jedoch wahrscheinlich nutzlos, da in Ihrem lokalen Repository normalerweise nur Zweige erstellt werden.
Die Informationen werden unter ./.git/logs/refs/heads/branch ..__ gespeichert. Beispielinhalt:
0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <[email protected]> 1438788420 +0200 branch: Created from HEAD
Das letzte Commit in diesem Beispiel stammt vom Benutzer "b", während der Zweig "b2" vom Benutzer "a" erstellt wurde. Wenn Sie Ihren Benutzernamen ändern, können Sie überprüfen, ob git reflog die Informationen aus dem Protokoll entnimmt und nicht den lokalen Benutzer verwendet.
Ich kenne keine Möglichkeit, diese lokalen Protokollinformationen an ein zentrales Repository zu übertragen.
vorausgesetzt:
master
gemachtmaster
zusammengeführt git log --format="%ae %an" master..<HERE_COMES_BRANCH_NAME> | tail -1
Ich weiß, dass dies nicht ganz der Umfang der Frage ist, aber wenn Sie die Notwendigkeit finden, nur Commits nach einem bestimmten Autor zu filtern, können Sie immer an grep pfeifen :)
# 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'
glückliche Codierung! :)