Was macht "Git-Schuld"?

314

Ich habe viele Fragen zu Verwendungsmethoden gesehen git blame, aber ich verstehe sie nicht wirklich.

Ich sehe eine BlameSchaltfläche über den Dateien auf der GitHub-Oberfläche. Wenn Sie darauf klicken, werden in der linken Leiste einige Unterschiede mit Benutzernamen angezeigt. Was bedeutet das?

Warum wird git blameeigentlich abgesehen von GitHub verwendet?

Himanshu Mishra
quelle
67
Wenn "Schuld" auch klingt, können Sie dieses Skript installieren und git praisestattdessen verwenden :) github.com/ansman/git-praise
Jon Kiparsky
7
Es sollte weder Schuld noch Lob sein; Es ist von Natur aus mutmaßlich und hätte objektiv sein sollen.
pdvries
41
git objectively-determine-contributerhat einfach nicht den gleichen Klang.
Ritwik Bose
27
@RitwikBose oder nurgit who
aktivb

Antworten:

238

Von git-Schuld :

Kommentiert jede Zeile in der angegebenen Datei mit Informationen aus der Revision, die die Zeile zuletzt geändert hat. Beginnen Sie optional mit Anmerkungen ab der angegebenen Revision.

Bei einmaliger oder mehrfacher Angabe beschränkt -L die Annotation auf die angeforderten Zeilen.

Beispiel:

[email protected]:~# git blame .htaccess
...
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  4) allow from all
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  5)
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  6) <IfModule mod_rewrite.c>
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  7)     RewriteEngine On
...

Bitte beachten Sie, dass git blameder Änderungsverlauf pro Zeile nicht im chronologischen Sinne angezeigt wird. Es wird nur angezeigt, wer die letzte Person war, die eine Zeile in einem Dokument bis zum letzten Festschreiben geändert hat HEAD.

Das heißt, um den vollständigen Verlauf / das vollständige Protokoll einer Dokumentzeile anzuzeigen, müssten Sie git blame path/to/filefür jedes Commit in Ihrem Dokument ein ausführen git log.

Kennzeichen
quelle
1
Also ist es nur für die, die letzte Person zu sehen?
Rıfat Erdem Sahin
2
Ja, Sie können die letzte Person sehen, die die Zeile geändert hat.
Mark
@Mark Wenn wir also eine IDE kommentieren, gibt sie intern einen Git-Blame-Befehl aus?
Nagarajan Shanmuganathan
2
@ NagarajanShanmuganathan Ja, wenn Sie Git verwenden, dann passiert genau das hinter den Kulissen.
Mark
152

Der Befehl erklärt sich recht gut. Es geht darum herauszufinden, welcher Mitarbeiter die bestimmte Zeile geschrieben oder das Projekt ruiniert hat, damit Sie ihnen die Schuld geben können :)

Röntgen
quelle
105
Der Befehl klingt tatsächlich so, als würden Sie jemandem die Schuld geben , indem Sie ihn ausführen . Zumindest klang es für mich so, bevor ich erfuhr, was es in diesem Beitrag tat.
Francisco C.
12
@ FranciscoC. Sie suchen dies: github.com/jayphelps/git-blame-someone-else
DustWolf
2
@ FranciscoC. Warten Sie was, tut es nicht genau das, dh Sie können jemand anderem die Schuld geben ?
IanDess
16
@IanDess Vielleicht ist es nur Semantik, aber es git blamehört sich so an, als hätte es einen anhaltenden Effekt, ähnlich wie git commit, wo es Sie nur darüber informiert, welche Änderungen von wem vorgenommen wurden. Das und die negative Konnotation, die das Wort "Schuld" trägt, lassen den Befehl wie etwas klingen, von dem Sie sich fernhalten sollten, und führen zu Fragen wie dieser, die um Klärung bitten.
Francisco C.
20
Klar sollte es heißen git praise.
Pfnuesel
75

Von GitHub :

Der Schuldbefehl ist eine Git-Funktion, mit der Sie feststellen können, wer Änderungen an einer Datei vorgenommen hat.

Trotz seines negativ klingenden Namens ist Git-Schuld eigentlich ziemlich harmlos; Seine Hauptfunktion besteht darin, darauf hinzuweisen, wer welche Zeilen in einer Datei geändert hat und warum. Es kann ein nützliches Werkzeug sein, um Änderungen in Ihrem Code zu identifizieren.

Grundsätzlich git-blamewird verwendet, um zu zeigen, welche Revision und welcher Autor die letzten Zeilen einer Datei zuletzt geändert haben. Es ist, als würde man den Verlauf der Entwicklung einer Datei überprüfen.

Himanshu Mishra
quelle
2
Dies scheint mir überflüssig zu sein. Sie können einen Unterschied zwischen Commits und ID des Benutzers aus dem Commit-Protokoll erkennen. Wenn ich hier alles verstehe, hat es weniger Beständigkeit als der Commit-Verlauf. Vielleicht fehlt mir etwas, aber es scheint, als würden Kodierungsstandards durch öffentliche Demütigung durchgesetzt.
user1431356
8
Ich denke, der Name des Befehls war das Ergebnis des spezifischen Sinns für Humor des Linus :) Es war nicht dazu gedacht, jemanden zu demütigen :) Es war nur eine lustige (oder nicht) Auswahl für einen Namen eines nützlichen Befehls :)
Mladen B.
2
@ user1431356 - Der Punkt ist, dass Sie die erste Protokollzeile möchten, die eine bestimmte Zeile betrifft . Andernfalls müssten Sie die Protokolle nach einer bestimmten Zeichenfolge durchsuchen. (Was in der Tat ein praktikabler Ansatz ist - suchen Sie in den Manpages nach "git log -S".)
Azernik
1
Der Titel "Schuld" gibt es schon seit Jahren vor git. Schauen Sie sich einfach die Implementierung von svn an . Es war kein Name von Linus Torvalds.
JackAce
"Ich denke, der Name des Befehls war das Ergebnis des spezifischen Sinns für Humor des Linus :) Er sollte nicht dazu verwendet werden, jemanden zu demütigen :)" lol ... Eher war es Linus 'Persönlichkeit und es war beabsichtigt jemanden demütigen.
Sinaesthetic
34

Der git blameBefehl wird verwendet, um zu wissen, wer / welches Commit für die letzten Änderungen an einer Datei verantwortlich ist. Der Autor / Commit jeder Zeile kann ebenfalls angezeigt werden.

git blame filename (verpflichtet sich für Änderungen für alle Zeilen im Code)

git blame filename -L 0,10 (verpflichtet sich für Änderungen von Zeile "0" zu Zeile "10")

Es gibt viele andere Möglichkeiten für Schuldzuweisungen, aber im Allgemeinen könnten diese helfen.

Bharath TS
quelle
2

Der git blameBefehl kommentiert Zeilen mit Informationen aus der Revision, die die Zeile zuletzt geändert hat, und ... mit Git 2.22 (Q2 2019) wird dies aufgrund einer Leistungskorrektur um " ", insbesondere in einem linearen Verlauf (der die ist ), schneller ausgeführtgit blame Norm, für die wir optimieren sollten).

Siehe Commit f892014 (02. April 2019) von David Kastrup ( fedelibre) . (Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 4d8c4da , 25. April 2019)

blame.c: Lassen Sie Origin-Blobs nicht so eifrig fallen

Wenn in einem übergeordneten Blob bereits Blöcke für die Schuld in der Warteschlange stehen, wird der Blob am Ende eines Schuldschritts sofort neu geladen, wodurch die Anzahl der E / A verdoppelt und beim Verarbeiten eines linearen Verlaufs entpackt wird.

Das Speichern solcher übergeordneten Blobs im Speicher scheint eine vernünftige Optimierung zu sein, die vor allem bei der Verarbeitung der Zusammenführungen aus alten Zweigen zusätzlichen Speicherdruck verursachen sollte.

VonC
quelle
1

Der git blameBefehl wird verwendet, um den Inhalt einer Datei zeilenweise zu untersuchen und festzustellen, wann jede Zeile zuletzt geändert wurde und wer der Autor der Änderungen war.

Wenn es einen Fehler im Code gab, verwenden Sie ihn, um zu identifizieren, wer ihn verdeckt hat. Dann können Sie ihm die Schuld geben. Git Schuld ist Schuld bekommen (d).

Wenn Sie den Verlauf eines Zeilencodes kennen müssen, verwenden Sie git log -S"code here", einfacher als Git-Schuld.

Git Log vs Git Schuld

Jackzhoumin
quelle