git und CR vs LF (aber nicht CRLF)

8

Das hört sich vielleicht nach einer überflüssigen Frage an (und kann sehr wohl eine überflüssige Frage sein), aber ich kann die Antwort nicht finden. Hier ist die Situation:

Meine Anwendung erstellt Textdateien mit CRs als Zeilenenden. Genauer gesagt, setze ich die Zeilenendungen nicht explizit auf CR, sondern nur auf die Ausgabe des Befehls, den ich verwende, um den Text zu erhalten. Natürlich könnte ich die CRs zu LFs manuell konvertieren, aber ich will nicht, wenn ich es vermeiden kann.

Git behandelt diese Dateien als einzelne Zeile (z. B. während eines Diffs). Ich habe über dieses Test-Repository festgestellt, dass die Zeilenenden die Ursache sind: Ссылка

Es interessiert mich eigentlich nicht, was die Zeilenenden im Dateisystem sind. Es ist nicht wichtig, zumindest noch nicht (es könnte mir schließlich egal sein, ob ich diese Dateien importieren muss, momentan ist es nur der Export). Aber ich nicht möchte die CRs in LFs in meiner Anwendung konvertieren, wenn ich es vermeiden kann, sowohl aus Gründen der Leistung als auch aus Gründen der Anal-Retentation :) Das ist keine Frage, wie man Textdateien erstellt, sondern wie man jede Textdatei im Repo dazu zwingt, nur LFs zu haben.

Kann git so konfiguriert werden, dass alle Zeilenenden in LF geändert werden, auch wenn die Dateien mit CR in ihnen festgeschrieben sind?

Ich bin auf Windows, benutze TortoiseGit und msysgit (und ein wenig TortoiseSVN auf der Seite) austauschbar, während ich Git lernen, wenn das wichtig ist.

    
Josh 08.05.2012, 02:01
quelle

2 Antworten

10

Git scheint keine CR-Zeilenenden zu unterstützen. Daher würde ich einen Filter schreiben, um ihn zu konvertieren die Zeilenumbrüche. Die Dateien im Arbeitsbaum haben CR-Zeilenenden und werden bei der Indexierung transparent in LF konvertiert. Der Filter besteht aus zwei Teilen: "clean" überprüft die Dateien und "wmude" überprüft die Dateien.

Verwenden Sie dies in .git/config :

%Vor%

Und .git/info/attributes (oder .gitattributes falls es versioniert werden sollte)

%Vor%

Beachten Sie, dass dies git-diff automatisch glücklich macht, da es die "saubere" Version verwendet.

Denken Sie daran, das Muster nur auf die Dateien zu setzen, die Sie benötigen, oder Binärdateien werden beschädigt und alle Textdateien werden mit CR-Zeilenenden ausgecheckt.

Beachten Sie auch, dass der Filter nicht konfiguriert wird, wenn er nicht konfiguriert wird. Fügen Sie daher beim Erstellen einer neuen Kopie des Repositorys die Konfigurationszeile hinzu.

    
Josh Lee 08.05.2012, 02:50
quelle
2

FWIW, ich konvertierte die Zeilenendungen auf der lokalen Seite der Dinge in LF. Es wurde schließlich die einfachere / weniger fehlerhafte Lösung.

    
Josh 06.11.2012 23:43
quelle

Tags und Links