Wagenrücklauf (^ M) aus bestimmten Zeilen entfernen, ohne jede Zeile zu ändern

3238
Fasih Awan

Ich habe einige ziemlich lange C ++ - Dateien und git diff --checkberichtet, dass es ^Min etwa 15 verschiedenen Zeilen ein paar Zeilenumbrüche gibt . Dies ist auf einem Windows 7-Computer. Nach dem Durchsuchen mehrerer Lösungen, z. B. der Advanced Save OptionsEOL-Konvertierungen von Visual Studio oder Notepad ++, scheinen sie alle Zeilen zu ändern, nicht nur die, über die sich Git beschwert. Dies führt dazu, dass ein Git-Diff jeder Zeile ersetzt wird.

Könnte dies daran liegen, dass alle vorherigen Änderungen an diesen Dateien auch Wagenrückläufe hatten ^Mund frühere Commits daran keine Wagenrücklaufwarnungen ignorierten?

Running git config core.autocrlfgibt true zurück, aber das Staging einer Datei bewirkt nichts, wenn ich sie git diff --cached --checknach dem Staging für diese Datei ausführe .

Gibt es eine Möglichkeit, sie zu entfernen? Wenn man manuell zur Leitung geht und versucht zu ändern, scheint das nicht zu helfen.

2

4 Antworten auf die Frage

1
gaoithe

Verwenden Sie dos2unix <file>if in der Befehlszeile. Sie korrigiert die benötigten Zeilenenden oder führt nichts aus, wenn nichts benötigt wird. Führen find . -name "*.cpp" -exec dos2unix {} +Sie mehrere Dateien aus. Dann vergleiche git diffvor dem Commit.

Am besten vermeiden Sie es, mit gemischten Zeilenenden in Dateien zu enden. Das Verschmelzen und Verfolgen der Geschichte kann unangenehm werden.

Einige Editoren ändern den Stil nicht, aber ich denke, wenn sogar ein ^ M in die Datei kommt, nehmen einige Editoren den Dosierstil an und ändern alle Zeilenenden, wenn sie Dateien schreiben.

Es ist normalerweise möglich, Einstellungen für Editoren zu finden, durch die der Editor den gewünschten Stil beibehalten kann. Zeilenende- und Tabulatoreinstellungen werden normalerweise ebenfalls je nach Stil festgelegt.

1
gaoithe

Git kann das automatisch mit machen git config --global core.autocrlf true. Dies geschieht jedoch zum Zeitpunkt des Auscheckens oder Festschreibens. Also zeigt git die Änderungen nicht an, sollte sich aber ruhig um die Konvertierung kümmern, WENN Ihr Editor einige neue unerwünschte Zeilenenden einführt.

Ich denke, verwenden Sie dos2unix, wenn sich die unerwünschten Zeilenenden bereits im Repository befinden.

Details finden Sie in der Antwort hier: https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settings und lesen Sie http://git-scm.com/book/de/Customizing-Git -Git-Konfiguration # Formatierung-und-Whitespace

0
Robert Jacobs

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 (es sei denn, Sie möchten eine neue Zeile, dann ersetzen Sie es mit \ 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 einen normalen Windows-Notizblock verwenden, werden die ^ M's als Boxen angezeigt. Sie können die Boxen entfernen. Hässlich, aber es funktioniert.

0
kofifus

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