Ich habe einige ziemlich lange C++-Dateien und git diff --check
melde, dass es in etwa 15 verschiedenen Zeilen einige Wagenrückläufe gibt ^M
. Dies ist auf einem Windows 7-Rechner der Fall. Nach der Suche in mehreren Lösungen, z. B. in Visual Studio Advanced Save Options
oder Notepad++s EOL-Konvertierungen, scheinen alle jede Zeile zu ändern, nicht nur die, über die sich Git beschwert. Dies führt zu einem Git-Diff, bei dem jede Zeile ersetzt wird.
Könnte dies daran liegen, dass alle vorherigen Änderungen an diesen Dateien ebenfalls Wagenrückläufe enthielten ^M
und vorherige Commits daran sämtliche Wagenrücklaufwarnungen ignorierten?
Beim Ausführen git config core.autocrlf
wird „true“ zurückgegeben, aber das Staging einer Datei bewirkt nichts, wenn ich git diff --cached --check
es nach dem Staging für diese Datei ausführe.
Gibt es eine Möglichkeit, sie zu entfernen? Manuell zur Zeile zu gehen und zu versuchen, sie zu ändern, scheint nicht zu helfen.
Antwort1
15 Zeilen?
Wählen Sie in Notepad++ „Ersetzen“. Wählen Sie „Erweitert“. Suchen Sie nach \r (das ist ^M) und ersetzen Sie es durch nichts (außer Sie möchten eine neue Zeile, dann ersetzen Sie es durch \n). Da Sie nicht alle ^Ms ersetzen möchten, drücken Sie nicht „Alle ersetzen“, sondern wählen Sie die aus, die Sie ersetzen möchten.
Wenn Sie den normalen Windows-Editor verwenden, werden die ^M als Kästchen angezeigt. Sie können die Kästchen entfernen. Hässlich, aber es funktioniert.
Antwort2
Verwendendos2unix <file>
wenn auf der Befehlszeile. Es korrigiert die erforderlichen Zeilenenden oder unternimmt nichts, wenn nichts erforderlich ist. Führen Sie ein aus, find . -name "*.cpp" -exec dos2unix {} +
um mehrere Dateien zu bearbeiten. Vergleichen Sie dann mit git diff
vor dem Commit.
Am besten vermeiden Sie gemischte Zeilenenden in Dateien. Dies kann das Zusammenführen und Verfolgen des Verlaufs erschweren.
Einige Editoren ändern den Stil nicht, aber ich glaube, wenn auch nur ein ^M in die Datei gelangt, übernehmen einige Editoren den DOS-Stil und ändern alle Zeilenenden, wenn sie die Datei schreiben.
Normalerweise können Sie Einstellungen für Editoren finden, mit denen der Editor den gewünschten Stil beibehält. Auch die Einstellungen für Zeilenende und Tabulatoren werden normalerweise je nach Stil festgelegt.
Antwort3
Git kann dies automatisch mit tun git config --global core.autocrlf true
.Dies geschieht jedoch zum Zeitpunkt des Checkouts oder Commit.Daher zeigt Git keine bereitgestellten Änderungen an, sondern kümmert sich stillschweigend um die Konvertierung, WENN Ihr Editor einige neue, unerwünschte Zeilenenden einführt.
Ich denke, verwenden Sie dos2unix, wenn die unerwünschten Zeilenenden bereits im Repository vorhanden sind.
Ausführliche Informationen finden Sie in der Antwort hier: https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settingsund lesehttp://git-scm.com/book/en/Anpassen-von-Git-Git-Konfiguration#Formatierung-und-Leerzeichen
Antwort4
Auf einem Windows-Rechner können Sie beispielsweise Folgendes tun:
for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f
Dadurch werden CRs aus allen Dateien mit der Erweiterung .js aus dem aktuellen Verzeichnis entfernt