1228 Stimmen

git ersetzt LF durch CRLF

Ich führe Git auf einem Windows XP-Rechner aus und verwende Bash. Ich habe mein Projekt aus SVN exportiert und dann ein leeres Repository geklont.

Dann habe ich den Export in das Verzeichnis bare repositories eingefügt und eine:

git add -A

Daraufhin erhielt ich eine Liste von Nachrichten:

LF wird durch CRLF ersetzt

Was sind die Auswirkungen dieser Umstellung? Es handelt sich um eine .NET-Lösung in Visual Studio.

1539voto

Antony Hatchkins Punkte 28362

Diese Meldungen sind auf den falschen Standardwert von core.autocrlf unter Windows.

Das Konzept der autocrlf ist es, die Umwandlung von Zeilenenden transparent zu handhaben. Und das tut sie!

Schlechte Nachrichten : Wert muss manuell konfiguriert werden.
Gute Nachrichten : Es sollte nur EINMAL pro Git-Installation durchgeführt werden (eine Einstellung pro Projekt ist ebenfalls möglich).

Wie autocrlf Werke :

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:

        repo                     repo                     repo
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \      
   /            \           /            \           /            \

Aquí crlf = Zeilenende-Markierung im Win-Stil, lf = unix-style (und mac osx).

(pre-osx cr bei keiner der drei oben genannten Optionen betroffen)

Wann wird diese Warnung angezeigt (unter Windows)?

    - autocrlf = true wenn Sie im Unix-Stil lf in einer Ihrer Dateien (= RARELY),
    - autocrlf = input wenn Sie win-style haben crlf in einer Ihrer Dateien (= fast IMMER),
    - autocrlf = false - NIEMALS!

Was bedeutet diese Warnung?

Die Warnung " LF wird durch CRLF ersetzt " sagt, dass Sie (mit autocrlf = true ) wird Ihr LF im Unix-Stil nach dem Commit-Checkout-Zyklus verloren gehen (es wird durch ein CRLF im Windows-Stil ersetzt). Git erwartet nicht, dass Sie unter Windows LF im Unix-Stil verwenden.

Die Warnung " CRLF wird durch LF ersetzt " sagt, dass Sie (mit autocrlf = input ) verliert nach einem Commit-Checkout-Zyklus Ihr CRLF im Windows-Stil (es wird durch ein LF im Unix-Stil ersetzt). Verwenden Sie nicht input unter Windows.

Eine weitere Möglichkeit zu zeigen, wie autocrlf Werke

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

donde x ist entweder CRLF (Windows-Stil) oder LF (Unix-Stil) und Pfeile stehen für

file to commit -> repository -> checked out file

Wie beheben

Standardwert für core.autocrlf wird bei der Git-Installation ausgewählt und in der systemweiten Gitconfig gespeichert ( %ProgramFiles(x86)%\git\etc\gitconfig unter Windows, /etc/gitconfig unter Linux). Außerdem gibt es (kaskadierend in der folgenden Reihenfolge):

   - "globale" (pro Benutzer) Gitconfig unter ~/.gitconfig ein weiterer
   - "global" (pro Benutzer) gitconfig unter $XDG_CONFIG_HOME/git/config o $HOME/.config/git/config et
   - "lokal" (pro Repository) gitconfig unter .git/config im Arbeitsverzeichnis.

Also, schreiben Sie git config core.autocrlf im Arbeitsverzeichnis, um den aktuell verwendeten Wert zu überprüfen und

   - git config --system core.autocrlf false            # Pro-System-Lösung
   - git config --global core.autocrlf false            # Pro-Benutzer-Lösung
   - git config --local core.autocrlf false              # projektbezogene Lösung

Warnungen
- git config Einstellungen können überschrieben werden durch gitattributes Einstellungen.
- crlf -> lf Die Konvertierung erfolgt nur beim Hinzufügen neuer Dateien, crlf Dateien, die bereits im Repo vorhanden sind, sind davon nicht betroffen.

Moral (für Windows):
    - Verwendung core.autocrlf = true wenn Sie vorhaben, dieses Projekt auch unter Unix zu verwenden (und nicht bereit sind, Ihren Editor/IDE so zu konfigurieren, dass er Unix-Zeilenenden verwendet),
    - Verwendung core.autocrlf = false wenn Sie vorhaben, dieses Projekt nur unter Windows zu verwenden (oder wenn Sie Ihren Editor/IDE so konfiguriert haben, dass er Unix-Zeilenendungen verwendet),
    - niemals verwenden. core.autocrlf = input es sei denn, Sie haben einen guten Grund dazu ( z.B. wenn Sie Unix-Dienstprogramme unter Windows verwenden oder wenn Sie Probleme mit Makefiles haben),

PS Was ist bei der Installation von git für Windows zu beachten?
Wenn Sie keines Ihrer Projekte unter Unix verwenden wollen, no mit der ersten Standardoption einverstanden. Wählen Sie die dritte Option ( Auschecken wie es ist, Übertragen wie es ist ). Sie werden diese Nachricht nicht sehen. Niemals.

PPS Meine persönliche Vorliebe ist die Konfiguration der Herausgeber/IDE um Endungen im Unix-Stil zu verwenden, und die Einstellung core.autocrlf a false .

837voto

Andrew Arnott Punkte 77359

Git hat drei Modi, wie es Zeilenenden behandelt:

$ git config core.autocrlf
# that command will print "true" or "false" or "input"

Sie können den zu verwendenden Modus festlegen, indem Sie einen zusätzlichen Parameter von true o false in die obige Befehlszeile einfügen.

Si core.autocrlf auf true gesetzt ist, bedeutet das, dass jedes Mal, wenn Sie eine Datei zum Git-Repository hinzufügen, die Git für eine Textdatei hält, alle CRLF-Zeilenenden in LF umgewandelt werden, bevor sie in der Übergabe gespeichert werden. Wann immer Sie git checkout etwas, werden alle Textdateien automatisch von LF in CRLF umgewandelt. Dies ermöglicht die Entwicklung eines Projekts auf verschiedenen Plattformen, die unterschiedliche Zeilenendstile verwenden, ohne dass die Übertragungen sehr laut werden, weil jeder Editor den Zeilenendstil ändert, da der Zeilenendstil immer einheitlich LF ist.

Der Nebeneffekt dieser bequemen Konvertierung, und darum geht es bei der Warnung, die Sie sehen, ist, dass eine Textdatei, die Sie ursprünglich mit LF-Endungen statt CRLF erstellt haben, wie üblich mit LF gespeichert wird, aber wenn sie später ausgecheckt wird, hat sie CRLF-Endungen. Bei normalen Textdateien ist das normalerweise kein Problem. Die Warnung ist in diesem Fall "zu Ihrer Information", aber für den Fall, dass Git eine Binärdatei fälschlicherweise für eine Textdatei hält, ist es eine wichtige Warnung, weil Git dann Ihre Binärdatei beschädigen würde.

Si core.autocrlf auf false gesetzt ist, wird keine Zeilenendkonvertierung durchgeführt, so dass die Textdateien so wie sie sind eingecheckt werden. Dies funktioniert in der Regel gut, solange alle Ihre Entwickler entweder unter Linux oder unter Windows arbeiten. Aber meiner Erfahrung nach neige ich immer noch dazu, Textdateien mit gemischten Zeilenenden zu erhalten, die am Ende Probleme verursachen.

Ich als Windows-Entwickler bevorzuge es, diese Einstellung eingeschaltet zu lassen.

Siehe https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-config.html für aktualisierte Informationen, die den "Eingabe"-Wert enthalten.

348voto

user2630328 Punkte 3031

Wenn Sie den Code bereits ausgecheckt haben, sind die Dateien bereits indiziert. Nachdem Sie Ihre Git-Einstellungen geändert haben, z. B. durch Ausführen von:

git config --global core.autocrlf input 

sollten Sie die Indizes aktualisieren mit

git rm --cached -r . 

und schreiben Sie den Git-Index neu mit

git reset --hard

Hinweis: Dadurch werden Ihre lokalen Änderungen entfernt; überlegen Sie, ob Sie sie vorher speichern wollen.


Fuente: Git für die Behandlung von Zeilenenden konfigurieren

95voto

Arun Punkte 2726
git config core.autocrlf false

55voto

Rifat Punkte 7472

Beide unix2dos y dos2unix ist unter Windows mit gitbash verfügbar. Sie können den folgenden Befehl verwenden, um die Konvertierung UNIX(LF) -> DOS(CRLF) durchzuführen. Daher erhalten Sie die Warnung nicht.

unix2dos filename

o

dos2unix -D filename

Führen Sie diesen Befehl jedoch nicht in einer bestehenden CRLF-Datei aus, da Sie sonst in jeder zweiten Zeile leere Zeilenumbrüche erhalten.

dos2unix -D filename funktioniert nicht mit allen Betriebssystemen. Bitte prüfen ce lien für Kompatibilität.

Wenn Sie den Befehl aus irgendeinem Grund erzwingen müssen, verwenden Sie --force . Wenn es ungültig ist, verwenden Sie -f .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X