Bearbeiten Sie die Datei direkt, ohne die Zeilenenden zu ändern

313
jww

Ich muss Quellen unter der Versionskontrolle von Git ändern. Bei den Quellen handelt es sich um Visual Studio-Projektdateien, die sie zu nativen Microsoft machen. Ich möchte Whitespace-Probleme vermeiden, darunter auch Line-End-Spiele.

Ich habe mir die Dateien vor der Änderung unter emacs angesehen, und das ^Mwar eindeutig nicht vorhanden.

Ich habe dann folgendes aus einem Skript von einem Linux-Rechner ausgeführt:

sed -i 's/odbc32.lib //g' *.vcproj sed -i 's/odbccp32.lib //g' *.vcproj 

Wenn ich mir die Änderungen anschaue:

$ git diff cryptest.vcproj diff --git a/cryptest.vcproj b/cryptest.vcproj index cec447d..9ae71ea 100644 --- a/cryptest.vcproj +++ b/cryptest.vcproj @@ -76,7 +76,7 @@ ... Name="VCLinkerTool" - AdditionalDependencies="odbc32.lib odbccp32.lib Ws2_32.lib" + AdditionalDependencies="Ws2_32.lib"^M SuppressStartupBanner="true" ... 

Wie führe ich einen Ersatz durch, ohne zusätzlichen Leerraum hinzuzufügen?

0

1 Antwort auf die Frage

1
meuh

In diesen Tagen Emacs automatisch die Zeilenende in einer Datei verwendet, erkennen und so werden Sie nicht sehen, ob eine Datei hat \noder \roder \r\nZeilenende. Bei Änderungen in Emacs werden die Zeilenenden beibehalten und imitiert.

Um wirklich zu sehen, was die Datei enthält, können Sie ausprobieren, cat -vetwelche Steuerzeichen einschließlich ^Mtabs ( ^I) und das Zeilenende ( $) angezeigt werden .

Beachten Sie, gitdass konfiguriert werden kann, um automatisch \r\nin \noder umgekehrt zu konvertieren, wenn Textdateien zwischen dem Arbeitsverzeichnis und der Objektdatenbank verschoben werden. In diesem Artikel und in diesem Artikel erfahren Sie, wie Ihr Git global und pro Repository konfiguriert ist und wie Sie ihn ändern können.

Es ist schwer zu sehen, wie sedman das hätte einführen können \r. Ich gehe davon aus, dass Sie sich auf einem Unix-System befinden.


Überprüfen Sie am oberen Rand Ihres Arbeitsverzeichnisses, dass die folgenden Befehle nichts anzeigen:

git config core.eol git config core.autocrlf find . -name .gitattributes -o -name attributes 

Führen Sie die ursprüngliche unbearbeitete Datei durch cat -vetund prüfen Sie, ob alle, einige oder keine der Zeilen mit den 3 Zeichen enden ^M$.

*** "Ich gehe davon aus, dass Sie sich auf einem Unix-System befinden ..." *** - ja (irgendwie). Ich bin auf einem Linux-System, nicht auf Unix: * "... Ich habe dann folgendes von einem Skript aus" "* ausgeführt. jww vor 8 Jahren 0
Zurück zur ursprünglichen Frage: * "Wie führe ich einen Ersatz durch, ohne zusätzlichen Leerraum hinzuzufügen?" *. Ich glaube nicht, dass dies in Ihrer Antwort enthalten ist. jww vor 8 Jahren 0
Am oberen Rand Ihres Arbeitsverzeichnisses können Sie die folgenden Befehle ausprobieren: `git config core.eol`` git config core.autocrlf `` find. -name .gitattributes -o -name Attribute` und wenn sie etwas anzeigen, fügen Sie die Ergebnisse Ihrer Frage hinzu. Zeigt "cat -vet cryptest.vcproj" vor dem Bearbeiten die Zeilenenden als 3 Zeichen "^ M $" in allen Zeilen an, nur einige oder keine. meuh vor 8 Jahren 0