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

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


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.


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

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 .


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.