Git – alle Autoren eines Dateiordners auflisten?

Lesezeit: 3 Minuten

Wie kann ich die Autorennamen eines bestimmten Ordners auflisten, der von Git versioniert ist?

Ich sehe, dass ich es kann git blame eine Datei und liste den Autor jeder Zeile auf, aber ich kann das nicht für einen Ordner tun, und ich möchte auch nur eine eindeutige Liste (jeder Autor wird nur einmal aufgeführt)

  • Ich denke, Sie sollten dafür ein Shell-Skript schreiben, mit for-loop, pipe, grep, sort, uniq, etc. Außerdem zeigt git Blame nicht alle Autoren, sondern nur die letzten Modifikatoren, ich denke, Sie sollten es tun das mit git log.

    – nicky_zs

    17. Juli 2014 um 15:45 Uhr

Benutzer-Avatar
ojdo

Eigentlich gibt es dafür einen nativen Git-Befehl, git shortlog:

git shortlog -n -s -- myfolder

wird eine Liste von Mitwirkenden geben, die Commits erstellt haben, die berührt haben myfolder. Möglichkeit -s bedeutet Zusammenfassung und zeigt nur die Anzahl der Commits pro Mitwirkendem an. Ohne es listet der Befehl die Commit-Meldungszusammenfassungen (1. Zeile) pro Autor auf. Möglichkeit -n sortiert die Autoren nach der Anzahl der Commits (von den meisten bis zu den wenigsten) statt alphabetisch.

Und nur für den Fall, dass Sie nicht auf einen losen gestoßen sind -- in einem git-Befehl noch: es ist eine Trennoption, um zu markieren, dass das Folgende kein a sein kann <revspec> (Bereich von Commits), aber nur a <pathspec> (Datei- und Ordnernamen). Das heißt: wenn man das weglassen würde -- und hatte zufällig einen Zweig oder Tag benannt Mein Ordnerder Befehl git shortlog -n -s myfolder möchten nicht nach dem Verzeichnis filtern Mein Ordneraber stattdessen Filtern Sie nach dem Verlauf des Zweigs oder Tags “Mein Ordner”. Dieses Trennzeichen ist daher in einer Reihe von Git-Befehlen nützlich (und notwendig), wie z log oder checkout, wenn Sie sich vergewissern möchten, ob Sie eine Revision (commit, branch, tag) oder einen Pfad (Ordner- oder Dateiname) angeben. Und natürlich hat diese Seite bereits eine Frage dazu.

  • Was macht -- tun?

    – Aaron Franke

    7. Dezember 2019 um 4:46 Uhr

  • git shortlog akzeptiert a <revision range> Streit. Wenn myfolder versehentlich der Name eines Tags oder Branches wäre, wäre das Shortlog auf den Commit-Verlauf dieses Labels beschränkt. Das Trennzeichen -- wird von vielen Git-Befehlen verwendet, um anzugeben, dass das Folgende immer nur ein Datei- oder Verzeichnisname (eine Pfadangabe) sein darf, kein Befehl oder keine Revision.

    – ojdo

    9. Dezember 2019 um 8:21 Uhr

  • @AaronFranke danke der Nachfrage; jetzt habe ich das auch eingebaut -- Teil direkt in der Antwort und verknüpft mit der kanonischen Frage zu SO.

    – ojdo

    30. März 2020 um 7:58 Uhr

Basierend auf Die kürzestmögliche Ausgabe aus dem Git-Log, die Autor und Datum enthält

mach das

git log --pretty=format:"%an%x09" myfolder | sort | uniq

  • Ich fand das zuverlässiger: git log --pretty=format:"%an%x09" myfolder | sort | uniq -c | sort -t ' ' -k 1 -r

    – Schotbi

    17. Oktober 2017 um 9:47 Uhr


  • Ordner oder Datei.

    – ahnbizcad

    20. Januar 2021 um 21:20 Uhr

  • Ich denke, diese Antwort ist jetzt beim Betrachten suboptimal git shortlog unter. Die richtige Antwort sollte die andere sein.

    – Karl

    12. Februar 2021 um 15:14 Uhr

Wenn Sie nur die Liste der Autoren eines Repositoriums wünschen:

git ls-files | xargs -n1 git blame --line-porcelain | sed -n
's/^author //p' | sort -d | uniq

Wenn Sie es für eine Dateireihenfolge nach der Anzahl der Zeilen von Codebeiträgen tun möchten, ist es einfach:

git blame --line-porcelain "_MY_FILE_" | sed -n 's/author //p' | sort | uniq -c | sort -rn

Wenn Sie es für das gesamte Repository tun möchten, auch nach Codebeiträgen geordnet:

git ls-files | xargs -n1 git blame --line-porcelain | sed -n 's/^author //p' | sort -f | uniq -ic | sort -nr

  • Sehr hilfreich git blame --line-porcelain. Eine Erleichterung für die Unix-Philosophie mit | grep author

    – Sridhar Sarnobat

    15. Januar 2021 um 21:25 Uhr

1245040cookie-checkGit – alle Autoren eines Dateiordners auflisten?

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

Privacy policy