2016-05-14 2 views
2

Gibt es einen Git-Befehl, um zu zeigen, welche Dateien von wem bearbeitet/bearbeitet werden?Gibt es einen Git-Befehl, um zu zeigen, welche Dateien von wem committed/bearbeitet werden?

Ausgabe soll wie:

FileName AuthorName 

fileA user1 user2 
fileB user 3 
fileC user1 
+0

Git Protokoll wird es tun, google für den Rest –

+0

@EngineerDollery Git Log gibt eine sehr chaotisch Ausgabe. Gibt es eine Möglichkeit, die Informationen ohne Dateiverarbeitung zu extrahieren? – SpiderRico

+0

Soweit ich die Frage verstehe Sie Committer (oder Autoren? Oder beide?) Namen für jede Datei in einem Repo sammeln wollen, während der gesamten Geschichte des Repo, richtig? Oder, vielleicht, um "tatsächliche" Autoren/Committer zu sammeln (d. H. Diejenigen, die mindestens eine Zeile im _current_Status von Dateien erstellt haben)? – user3159253

Antwort

1

Ich glaube nicht, dass Sie dies mit einem einzigen Befehl git erreichen können.

In sh, bash oder zsh Sie können dies tun:

git ls-files -z | xargs --null -L1 -I % sh -c "printf %' '; git annotate -p % | sed -nr '/^author /{s/^author (.*)/\1/;p}' | sort | uniq | awk '{printf (\$0 \" \")}END{print \"\"}'" 

Oder besser lesbar: Erstellen Sie eine Skriptdatei print_file_and_its_authors.sh:

#!/bin/sh 

printf $1' ' # Output filename without appending a line break. 

# Output file authors and a line break: 
git annotate -p $1 \ 
    | sed -nr '/^author /{s/^author (.*)/\1/;p}' \ 
    | sort | uniq \ 
    | awk '{printf ($0 " ")}END{print ""}' 

Dann tun:

chmod u+x print_file_and_its_authors.sh 
git ls-files -z | xargs --null -L1 ./print_file_and_its_authors.sh 
1

Sie Ihre eigenen Möglichkeiten nutzen.

In der --pretty können Sie Farben einstellen und wählen Sie jeden Inhalt, den Sie anzeigen möchten.

In Ihrem Fall sollten Sie den Autor angezeigt - wählen Sie eine der

% aX - Option auf der Grundlage Ihrer Bedürfnisse.


format:<string>

Das Format: Format ermöglicht es Ihnen, welche Informationen Sie wollen zeigen, angeben. Es funktioniert ein wenig wie printf-Format, mit der bemerkenswerten Ausnahme, dass Sie eine neue Zeile mit% n anstelle von \ n erhalten.

ZB Format:

The author of fe6e0ee was Junio C Hamano, 23 hours ago 
The title was >>t4119: test autocomputing -p<n> for traditional diff input.<< 

The placeholders are:.

%C(…): Farbspezifikation, wie beschrieben in color.branch * Konfigurationsoption The author of %h was %an, %ar%nThe title was >>%s<<%n so etwas wie diese zeigen würde, ; Wenn Sie auto hinzufügen, wird am Anfang nur dann eine Farbe ausgegeben, wenn die Farben für die Protokollausgabe aktiviert sind (durch color.diff, color.ui oder --color und unter Berücksichtigung der automatischen Einstellungen des ersten, wenn wir zu einem Terminal gehen). auto alone (d. h.% C (auto)) aktiviert die automatische Färbung der nächsten Platzhalter, bis die Farbe erneut umgeschaltet wird.

%C(…): Farbspezifikation, wie in color.branch beschrieben. * Konfigurationsoption; Wenn Sie auto hinzufügen, wird am Anfang nur dann eine Farbe ausgegeben, wenn die Farben für die Protokollausgabe aktiviert sind (durch color.diff, color.ui oder --color und unter Berücksichtigung der automatischen Einstellungen des ersten, wenn wir zu einem Terminal gehen). auto alone (d. h.% C (auto)) aktiviert die automatische Färbung der nächsten Platzhalter, bis die Farbe erneut umgeschaltet wird.

%Cblue: Schalter Farbe zu blau
%Cgreen: Schalter Farbe zu grün
%Cred: Schalter Farbe auf rot
%Creset: Reset Farbe
%D: ref Namen ohne "(", ")" Wrapping.
%G?: Show „G“ für eine gute Signatur, „B“ für ein Bad Unterschrift, „U“ für eine gute, nicht vertrauenswürdige Signatur und „N“ für keine Unterschrift
%GG: roh Bestätigungsnachricht von GPG für einen unterzeichnetes begehen
%GK: zeigen den Schlüssel verwendet, ein signiertes zu unterzeichnen verpflichten
%GS: den Namen des Unterzeichners zeigen für einen Hash-
%H: begehen unterzeichnet begehen
%N: Noten begehen
%P: Mutter
0 HashesBaum Hash
%aD: Autor Datum, RFC2822 Stil
%aE: Autor E-Mail (unter Beachtung .mailmap findet git-shortlog (1) oder git-Schuld (1))
%aI: Autor Datum, strenge ISO-8601-Format
%aN: Autor Name (unter Beachtung .mailmap findet git-shortlog (1) oder git-Schuld (1))
%ad: Autor Datum (Format Hinsicht --date = Option)
%ae: Autor E-Mail
%ai: Autor Datum, ISO 8601-like Format
%an: Name des Autors
%ar: Autor Datum, relativ
%at: Autor Datum, UNIX Zeitpunkt
%b: Körper
%cD: Committer Datum, RFC2822 Stil
%cE: Committer E-Mail (unter Beachtung .mailmap finden git-shortlog (1) oder git -blame (1))
%cI: Committer Datum, strenge ISO-8601-Format
%cN: Committer Name (unter Beachtung .mailmap findet git-shortlog (1) oder git-Schuld (1))
%cd: Committer Datum (Format Hinsicht --date = Option)
%ce: Committer E-Mail
%ci: Committer Datum, ISO 8601-like Format
%cn: Committer Name
%cr: Committer Datum, relativ
%ct: Committer Datum, Zeitstempel UNIX
%d: ref Namen, wie die Möglichkeit --decorate GIT-log (1)
%e: Codierung
%f: Betreffzeile, geeignet für einen Dateinamen hygienisiert
%gD: reflog Selektor zB refs/Stash @ {1}
%gE: reflog Identität E-Mail (unter Beachtung .mailmap finden git-shortlog (1) oder git-Schuld (1))
%gN: Reflog-Identitätsname (respecting .mailmap, siehe git-shortlog (1) oder git-blame (1))
%gd: verkürzter Reflog-Selektor, z, Versteck @ {1}
%ge: reflog Identität E-Mail
%gn: reflog Identität Name
%gs: reflog Thema
%h: Hash
%m: links abgekürzt begehen, rechts oder Grenzmarke
%n: Newline
%p: abgekürzt Mutter Hashes
%s: Betreff
%t: abgekürzter Baum Hash
%w([<w>[,<i1>[,<i2>]]]): wechseln Sie die Zeilenumbruch, wie die Option -w von git-shortlog (1).
%x00: drucken ein Byte von einem Hex-Code

0

Wenn Sie die spezifische Datei oder Dateien kennen, können Sie Verwenden Sie für jede Datei git log --pretty=%an -- some_file | sort -u, um die Autoren aufzulisten, die diese Datei bearbeitet haben. Was das von Ihnen erwartete Ausgabeformat angeht, können Sie einen weiteren Schritt machen. Dieser Befehl listet alle Dateien des aktuellen HEAD auf, einschließlich der Dateien, die gelöscht wurden, und ihrer Editoren.

git log --pretty="/ %h" --name-only | grep -v ^$| grep -v ^/ | sort -u | while read line 
do 
authors=$(git log --pretty=%an -- "$line" | sort -u) 
echo $line,$authors 
done 

Der git log --pretty="/ %h" --name-only | grep -v ^$| grep -v ^/ | sort -u Teil ist es, alle Dateien einschließlich derjenigen zu finden, die gelöscht wurden. Ich denke, es muss einen einfacheren Weg geben.

Verwandte Themen