webentwicklung-frage-antwort-db.com.de

Finden Sie den Zweigschöpfer heraus

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.

113
Ofir Farchy

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.

42
Christopher

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
235
DarVar

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
24
Mike
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
8
KhaledMohamedP

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

7
suryakrupa

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.

3
Gustave

vorausgesetzt:

  1. zweig wurde aus master gemacht
  2. wurde noch nicht mit master zusammengeführt

 git log --format="%ae %an" master..<HERE_COMES_BRANCH_NAME> | tail -1
1
Aleksey Bykov

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! :)

0
avocadojesus