2013-07-25 12 views
5

Es gibt ein Projekt, an dem wir arbeiten, wo die Mehrheit der Commits von einem Front-End-Entwickler hinzugefügt wird. Er bearbeitet hauptsächlich HTML-, CSS- und JavaScript-Dateien, die nichts mit der Backend-Arbeit zu tun haben, mit der ich helfe. Es wäre großartig, wenn ich die git log Minus-Commits anzeigen könnte, die vom Front-End-Entwickler hinzugefügt wurden, damit ich einen Blick auf Commits bekommen konnte, die sich nur auf das Backend bezogen.Git-Log ohne Autoren-Commits

Gibt es eine Möglichkeit, die ich zu git log passieren kann, die mich zu ausschließen alle Commits von einem Autor ermöglichen würde? Ich möchte nur die Commits dieses einen Entwicklers ausschließen, Ich interessiere mich immer noch für die Anzeige von Commits von anderen Entwicklern als auch.

+1

mögliche Duplikate von [Wie kann ich ein Git-Protokoll von nur einem Benutzer Commits anzeigen?] (Http://stackoverflow.com/questions/4259996/how-can-i-view-a-git-log-of- just-one-users-commits) – trojanfoe

+3

Hm ... das scheint eine Lösung für das gegenteilige Problem von dem zu sein, das ich versuche zu lösen. –

+0

Einverstanden, Trojaner ist falsch. Sie brauchen etwas Spezifischeres. – usumoio

Antwort

3

Sie benötigen ein Regular expression to match a line that doesn't contain a word?Negative lookahead die genau das tun, aber Sie haben git fragen --perl-regexp zu verwenden.

git log --author='^(?!krlmlr).*$' --perl-regexp 

Nach git help log,

--perl-regexp ... libpcre in kompiliert werden muss

Offenbar nicht alle git s da diese aus haben. Für den, der mit Ubuntu 13.04 ausgeliefert wird, funktioniert das out of the box.

+0

Das sieht also ziemlich elegant aus und ist wahrscheinlich die richtige Antwort. Leider wurde meine Version von git nicht mit pcre kompiliert, daher gibt mir das Ausführen des Befehls eine ähnliche Fehlermeldung. Momentan habe ich keine Zeit, die Neukompilierung durchzuführen, aber ich akzeptiere die Antwort. Ich denke, der Perl-Regexp-Pfad ist wahrscheinlich die richtige Richtung, um hineinzugehen. Danke. –

+0

@ElliotLarson: Ich bin auf Ubuntu 13.04, funktioniert out of the Box für mich. – krlmlr

+0

Hm, Ich habe Git mit Homebrew auf meinem Mac installiert. Ich werde herausfinden müssen, warum die Homebrew-Version nicht standardmäßig mit pcre ausgeliefert wird, wenn sie standardmäßig auf Ubuntu installiert ist. Manchmal "scheitern" diese Dinge während der Kompilierungszeit mit Homebrew, wenn das System funkig ist, was bedeutet, dass einige Perl-Bibliotheken an den erwarteten Stellen nicht gefunden wurden und das resultierende Kompilierungs-Flag weggelassen wurde. –

0

Ich denke this article erklärt es klar. (Obwohl es unter @trojanfoe Link erwähnt wurde). Hauptsächlich sagt es:

Jedoch ist es schwierig, Commits durch einen bestimmten Autor oder Satz von Autoren auszuschließen, die reguläre Ausdrücke verwenden, wie hier bemerkt. Stattdessen drehen einzuschlagen und Rohrleitungen Sie von Adam ausschließen kann von Autor Commits:

git log --format='%H %an' | # get a list of all commit hashes followed by the author name 
grep -v Adam |    # match the name but return the lines that *don't* contain the name 
cut -d ' ' -f1 |   # from this extract just the first part of the line which is commit ref 
xargs -n1 git log -1  # call git log from that commit stopped after 1 commit 

Eine Einschränkung ist, dass einige Protokolloptionen, die nicht verfügbar sind, wie --graph aufgrund wollen würde zu den Mechaniken, git Log mehrmals aufzurufen.

+1

Was genau erklärt "dieser Artikel"? Bitte fasse zusammen - nur ein Link ist keine Antwort. – krlmlr

+0

Ich habe diesen Artikel in meiner ersten Suche gesehen.Dies löst mein Problem nicht wirklich, es sei denn, ich möchte den Ansatz verfolgen, alle Autoren mit Ausnahme eines Namens zu benennen, was keine großartige Lösung ist. Der resultierende Befehl wäre hässlich und fehleranfällig. Ich konnte sehen, wie ich einen Alias ​​dafür herstellte, und jedes Mal, wenn wir jemanden zum Team hinzufügten, musste ich meinen Alias ​​aktualisieren, aber nicht bevor ich meinen Alias ​​laufen ließ und kurz darüber verwirrt war, warum der "Dave" (ein neuer Entwickler) werden nicht angezeigt. Ich würde eher einen Autor ausschließen. –

+0

Lediglich das Posten eines Links ohne relevante Zitate ist *** keine gute Antwort. Was ist, wenn die Verbindung in der Zukunft bricht? Dann wird die Antwort völlig nutzlos. Wenn Sie die relevanten Informationen aus dem Link in Ihrer Antwort zitieren, sind die Informationen zu Stack Overflow auch dann noch verfügbar, wenn die Verbindung unterbrochen wird. –

3
git rev-list --format='%aN' --all \ 
| sed 'N;/\nauthorname$/d;s/commit \(.*\)/\n.*/\1/' \ 
| git log --stdin 

und natürlich Ersatz, was Sie für --all oben wollen, leitet.

Bearbeiten: Liste/Auswahl/Prozess-Pipelines wie diese sind Brot und Butter, es ist nur wie git (wie viele Unix-Tools) gebaut wurde.

+0

Ich konnte das aus irgendeinem Grund nicht zum Laufen bringen, obwohl ich mit sed total noob bin. Es könnte einfach sein, dass dies wirklich nah an dem ist, wonach ich suche, aber ich bin einfach nicht sed genug, um den Befehl zu ertragen. –