Git Schuld zeigt keine Geschichte

88

Wenn ich eine Datei mit gits beschuldige (mit msysgit), erhalte ich immer die folgende Art von Ausdruck:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

dh es werden alle Zeilen als noch nicht festgeschrieben angezeigt.

Ich habe dies bei vielen Dateien versucht, die viele Commits haben - immer die gleichen Ergebnisse. Ich habe auch versucht, einen relativen / vollständigen Pfad zu verwenden, aber es scheint keinen Unterschied zu machen.

Wenn ich versuche, die Schuld von TortoiseGit zu verwenden, wird jede Zeile beim ersten Festschreiben immer als zuletzt festgeschrieben angezeigt:

Alt-Text

Ich dachte sogar, wie gesagt, es gibt tatsächlich Dutzende von Commits in der Geschichte dieser Dateien.

Ideen?

Bearbeiten - Weitere Informationen

  • Git Schuld funktioniert gut auf GitHub, wo dieses Repo gehostet wird.
  • Es funktioniert auch gut, wenn ich es auf einen Linux-Rechner klone und dort die Schuld trage
  • Es scheint, dass dies nur auf msysgit nicht funktioniert
Assaf Lavie
quelle
Für mich resultierte dieses Problem aus der Verwendung eines verknüpften Pfads, der einem vom Repository erkannten Pfad zugeordnet war, sodass die Datei für völlig neu gehalten wurde.
Kzqai
Hinweis: Ab Git 2.0.1 (25. Juni 2014) sollte Git-Schuld aufhören, alle diese "Noch nicht festgeschriebenen" Zeilen zu melden. Siehe meine Antwort unten
VonC
Auf der Mailingliste: git.661346.n2.nabble.com/… Kommt auch unter Linux vor.
Ciro Santilli 23 冠状 病 六四 事件 23
Dies betrifft auch die WSL, daher habe ich das Tag hinzugefügt. Hoffe das ist OK.
Mikemaccana

Antworten:

126

git blame file.txtbeschuldigt die Version von file.txt in Ihrer Arbeitskopie. Wenn file.txt Windows-Newlines (CRLF) im Repo enthält und Sie haben core.autocrlf = true, wird jede Zeile von file.txt als anders betrachtet und git blameals noch nicht festgeschrieben gemeldet .

Der Grund, warum git blame <my_branch>(oder noch besser git blame HEAD, was funktioniert, egal in welchem ​​Zweig Sie sich befinden) funktioniert, ist, dass die Arbeitskopie-Version nicht beschuldigt wird, sodass kein Potenzial für Zeilen besteht, die noch nicht festgeschrieben wurden.

Kusma
quelle
117
git blame -wignoriert das Leerzeichen, so dass Sie immer noch die Arbeitskopie beschuldigen können, wenn gewünscht
Kyle Heironimus
13
Git Schuld -w sollte eine separate Antwort sein und die akzeptierte;). Akzeptierte Antwort ohne Kommentar war für mich nutzlos.
Guillaume Perrot
55

Fand die Lösung - sehr komisch.

Wenn ich das mache:

git blame file.txt

Die Geschichte ist gebrochen, wie oben angegeben.

Wenn ich das stattdessen mache:

git blame my_branch file.txt

Es klappt!

Dies ist sehr seltsam, da für die Verwendung von AFAICS kein Filialname erforderlich ist:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
Assaf Lavie
quelle
7
Das funktioniert bei mir, danke, dass du es gepostet hast. Sie sollten diese als Antwort IMO markieren.
Wes
Dies funktioniert bei mir in msysgit, aber der Dateiname unterscheidet zwischen Groß- und Kleinschreibung. So kann ich schreiben git blame mybranch cmakelists.txtund es wird scheitern; aber wenn ich schreibe git blame mybranch CMakeLists.txt, wird es funktionieren.
Schleife
Ich stimme zu, wes; Die Schuld zeigte keinen Verlauf, bis ich den Zweig spezifizierte, und das stimmt nicht mit der Dokumentation überein.
Josephdpurcell
OMG, die Schuld ist so gebrochen.
Ciro Santilli 法轮功 冠状 病. 事件 23
8

Ab Git 2.0.1 (25. Juni 2014) sollte Git Blit aufhören, alle diese "Noch nicht festgeschriebenen" Zeilen zu melden.

Siehe Commit 4d4813a (26. April 2014) von Brian M. Carlson ( bk2204) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit e934c67 , 06. Juni 2014)

blame: Behandeln Sie Dateien unabhängig davon korrekt autocrlf

Wenn eine Datei CRLFZeilenenden in einem Repository mit enthält core.autocrlf=input, werden die Zeilen immer als " Not Committed Yet" markiert , auch wenn sie nicht geändert wurden.
Versuchen Sie nicht, die Zeilenenden beim Erstellen des falschen Commits zu konvertieren, damit die Schuld unabhängig von der autocrlfEinstellung korrekt funktioniert .

VonC
quelle
8
Ich habe immer noch das Problem in Git v2.1.3
DBedrenko
Ich habe das Problem mit Git-Version 2.16.1.windows.1
Radon8472
@ Radon8472 Können Sie mit Ihrer git config -lAusgabe (und einem Link zurück zu dieser Antwort) eine neue Frage hinzufügen, die das Problem veranschaulicht? Auf diese Weise können ich und andere versuchen, festzustellen, ob das Problem weiterhin besteht.
VonC
1

Eine andere Möglichkeit: Tippfehler zwischen Groß- und Kleinschreibung

Ich hatte das gleiche Problem mit git tad file.txt und stellte dann fest, dass ich mit file.txt einen Tippfehler beim Dateinamen gemacht hatte

Es wurde beispielsweise in File.txt geändert, und ich habe die erwarteten Ergebnisse erhalten, ohne dass my_branch: git tad File.txt angegeben werden musste

John Jacecko
quelle