Finden Sie einen Git-Branch-Ersteller heraus

Lesezeit: 5 Minuten

Finden Sie einen Git Branch Ersteller heraus
Ofir Farchy

Ich möchte herausfinden, wer einen Zweig erstellt 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.

  • Sie können in Git keinen Branch-Autor / -Ersteller erhalten. Was Sie hier tun, ist, den Tipp des Autors der Branche zu erhalten. Es wird sich ändern, sobald jemand dort einen neuen Commit pusht.

    – sylvain.joyeux

    21. August 2012 um 13:01 Uhr

  • Haftungsausschluss: Die implizite Annahme in dieser Frage/Antwort ist „in einem Workflow mit nur eine Person pro Filiale“. In anderen Workflows, in denen sich mindestens zwei Mitarbeiter einen Branch teilen, sind diese Informationen (Branch Creator) nicht über Git erhältlich, und die obigen Antworten könnten jemanden zu falschen Annahmen verleiten.

    – Romain Waleri

    12. Juni 2019 um 19:40 Uhr

Finden Sie einen Git Branch Ersteller heraus
DarVar

Remote-Git-Zweige nach Autor sortiert nach Commit-Datum auflisten:

git for-each-ref --format="%(committerdate) %09 %(authorname) %09 %(refname)" --sort=committerdate

  • Es ist die letzte Person, die sich an diesen Zweig bindet. Da ein Branch nur ein Zeiger auf ein Commit ist.

    – DarVar

    13. Januar 2015 um 16:00 Uhr

  • Sollte das unter Windows funktionieren? Ich bekomme “Eingabedatei zweimal angegeben”.

    – Steve Kammern

    25. März 2015 um 11:32 Uhr


  • Bei tabellarischer Formatierung: git for-each-ref --format='%(committerdate)%09%(authorname)%09%(refname)' | sort -k5n -k2M -k3n -k4n | grep remotes | awk -F "\t" '{ printf "%-32s %-27s %s\n", $1, $2, $3 }' (Idee von stackoverflow.com/a/3631819 – möglicherweise müssen Zahlen in awk printf angepasst werden, abhängig von der maximalen Länge von Datetime/Autorennamen)

    – Gary S. Weaver

    2. April 2015 um 13:38 Uhr


  • Falls auf dem Zweig kein Commit stattgefunden hat und dieser vom Master erstellt wurde, ist der „Autor des Zweigs“ völlig unabhängig von diesem Zweig, sondern nur der letzte Committer auf dem Master. Wenn Sie Änderungen vom Master einlesen und es sich um einen schnellen Vorlauf handelt, ist es wieder der letzte Committer auf dem Master, der möglicherweise nie an diesem Zweig gearbeitet hat.

    – Gustav

    5. August 2015 um 15:55 Uhr

  • Obwohl diese Antwort und dieser Befehl möglicherweise nützlich sind, halte ich sie für eine irreführende Antwort auf die Frage. Dies listet Autorennamen in allen Zweigen auf, die der letzte Commiter in einem Zweig sind. Es gibt ein Anzahl von Umständen, unter denen das eigentlich nicht der Fall wäre Schöpfer der Filiale. Die wahre Antwort ist, dass Git diese Informationen einfach nicht speichert.

    – Peabody

    5. Februar 2018 um 23:15 Uhr

1646243886 272 Finden Sie einen Git Branch Ersteller heraus
Christoph

Ein Branch ist nichts anderes als ein Commit-Zeiger. Als solches werden keine Metadaten wie „wer hat mich erstellt“ nachverfolgt. Überzeugen Sie sich selbst. Versuchen cat .git/refs/heads/<branch> in Ihrem Depot.

Wenn Sie diese Informationen wirklich in Ihrem Repository verfolgen möchten, sehen Sie sich die Zweigbeschreibungen an. Sie ermöglichen es Ihnen, zumindest lokal beliebige Metadaten an Branches anzuhängen.

Auch die Antwort von DarVar unten ist ein sehr cleverer Weg, um an diese Informationen zu gelangen.

  • Für mich war dies in .git/refs/heads/ “ref” war Plural

    – Jeffrey LeCours

    6. November 2014 um 14:28 Uhr


  • Die Antwort von DarVar ist zwar für einige wahrscheinlich nützlich, aber keine genaue Antwort. Es ist einfach eine prägnantere Art, das zu tun, was der Autor der ursprünglichen Frage bereits getan hat (nämlich den Namen des letzten Commiters für einen Zweig zu erhalten).

    – Peabody

    5. Februar 2018 um 23:18 Uhr

  • Es ist wahr, dass ein Zweig nur ein Zeiger ist, aber es ist nicht ganz richtig, dass er nicht verfolgt, wer ihn erstellt hat. Natürlich tut es das! Nur nicht der Leiter des Zweigs (es sei denn, der Zweig ist nur ein Commit). Um herauszufinden, wer den Zweig erstellt hat, finden Sie den Autor des „ersten“ Commits. Das Finden des “ersten” Commit ist in einigen Fällen nicht trivial, da ein Zweig nicht verfolgt, welches Commit “zuerst” war. Der erste Commit ist einfach der Commit, der hat git merge-base $BRANCH $BRANCHED als Elternteil. Woher $BRANCH ist der Zweig und $BRANCHED der Zweig dessen, wovon er abgezweigt wurde.

    – CervEd

    27. September 2021 um 7:33 Uhr

1646243886 616 Finden Sie einen Git Branch Ersteller heraus
Mike

Ich habe die vorherigen Antworten optimiert, indem ich die verwendet habe --sort Flagge und etwas 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

  • perfekt für Schuldzuweisungen in Farben

    – bigbiggerpepe

    14. Dezember 2017 um 13:26 Uhr

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

1646243886 616 Finden Sie einen Git Branch Ersteller heraus
suryakrupa

Ergänzung zu DarVars Antwort:

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

PS: Wir haben AWK verwendet, um den Autor und den Remote-Zweig hübsch auszudrucken.

  • das funktioniert nur, wenn der Autorenname aus einem einzigen Wort besteht. Wenn es sich um getrennte Vor- und Nachnamen handelt, sehen Sie den Nachnamen anstelle des Zweignamens …

    – Legato

    3. März 2016 um 12:59 Uhr

1646243887 733 Finden Sie einen Git Branch Ersteller heraus
Gustav

Sie können herausfinden, wer einen Zweig in Ihrem erstellt hat lokal Depot von

git reflog --format=full

Beispielausgabe:

commit e1dd940
Reflog: HEAD@{0} (a <a@none>)
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/ gespeichert.sich verzeigen. Beispielinhalt:

0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200   branch: Created from HEAD

Der letzte Commit in diesem Beispiel stammte von Benutzer „b“, während der Zweig „b2“ von Benutzer „a“ erstellt wurde. Wenn Sie Ihren Benutzernamen ändern, können Sie überprüfen, ob git reflog die Informationen aus dem Protokoll übernimmt und nicht den lokalen Benutzer verwendet.

Ich kenne keine Möglichkeit, diese lokalen Protokollinformationen an ein zentrales Repository zu übertragen.

  • das funktioniert nur, wenn der Autorenname aus einem einzigen Wort besteht. Wenn es sich um getrennte Vor- und Nachnamen handelt, sehen Sie den Nachnamen anstelle des Zweignamens …

    – Legato

    3. März 2016 um 12:59 Uhr

1646243887 615 Finden Sie einen Git Branch Ersteller heraus
Viktor

Wir können anhand des Autorennamens herausfinden

git for-each-ref --format="%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)" refs/remotes/ --sort=authorname DESC

  • git for-each-ref --format='%(authorname),%(creatordate:short),%(if)%(HEAD)%(then)*%(else)%(refname:short)%(end)' refs/remotes/ --sort=creatordate DESC > ../<filename>.csv das hat mir geholfen…

    – Parag Bangad

    22. April 2021 um 18:54 Uhr

914660cookie-checkFinden Sie einen Git-Branch-Ersteller heraus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy