So ändern Sie die Einstellungen für das Zeilenende

582

Gibt es eine Datei oder ein Menü, mit dem ich die Einstellungen für den Umgang mit Zeilenenden ändern kann?

Ich habe gelesen, dass es 3 Möglichkeiten gibt:

  1. Kasse im Windows-Stil, Commit im Unix-Stil

    Git konvertiert LF in CRLF, wenn Textdateien ausgecheckt werden. Beim Festschreiben von Textdateien wird CRLF in LF konvertiert. Für plattformübergreifende Projekte ist dies die empfohlene Einstellung unter Windows ("core.autocrlf" ist auf "true" gesetzt).

  2. Checkout wie besehen, Commit im Unix-Stil

    Git führt beim Auschecken von Textdateien keine Konvertierung durch. Beim Festschreiben von Textdateien wird CRLF in LF konvertiert. Für plattformübergreifende Projekte ist dies die empfohlene Einstellung unter Unix ("core.autocrlf" ist auf "input" gesetzt).

  3. Kasse wie sie ist, Commit wie sie ist

    Git führt beim Auschecken oder Festschreiben von Textdateien keine Konvertierungen durch. Die Auswahl dieser Option wird für plattformübergreifende Projekte nicht empfohlen ("core.autocrlf" ist auf "false" gesetzt).

qwertymk
quelle
3
Welche davon ist die Standardeinstellung?
Stephen
2
Trotzdem sieht es so aus, als ob der Standardwert wahr ist, was ich für angemessen halte.
Stephen
19
Ich finde tatsächlich, dass die 3. Option besser funktioniert. Ansonsten war ich oft in Situationen, in denen ich sowohl Batch- als auch Sh-Skripte auf derselben Plattform (Windows / Linux) bearbeitete und sie dann festschrieb und Git automatisch die Zeilenenden für eine Plattform "repariert" ... Nein, ich bin lieber selbstständig sich der Zeilenenden bewusst sein und sie genau so festschreiben / auschecken, wie sie sind.
JustAMartin
1
@Neutrino Ich wünschte, dies wäre wahr, aber ein Beispiel für eine IDE, die mit Ihren Zeilenenden in Konflikt gerät (und keine vernünftige Konfigurationsoption zum Deaktivieren bietet), ist Visual Studio.
Cássio Renan

Antworten:

529

Der normale Weg, dies zu kontrollieren, ist mit git config

Zum Beispiel

git config --global core.autocrlf true

Für Details scrollen Sie in diesem Link zu Pro Git nach unten zum Abschnitt "core.autocrlf".


Wenn Sie wissen möchten, in welcher Datei dies gespeichert ist, können Sie den folgenden Befehl ausführen:

git config --global --edit

und die globale Konfigurationsdatei von git sollte in einem Texteditor geöffnet werden, und Sie können sehen, woher diese Datei geladen wurde.

CodingWithSpike
quelle
17
trueoder falsesind nur zwei Optionen, der Installer hat drei
qwertymk
49
inputist die 3. Option (wie in dem von mir angegebenen Link angegeben). Die 3 Optionen sind true| false| input
CodingWithSpike
2
Hier ist eine weitere gute SO-Frage zu diesem Thema: stackoverflow.com/questions/3206843/…
CodingWithSpike
31
Wenn Sie Ihre eigene Frage in den kopierten / eingefügten Auszügen erneut lesen: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"Haben Sie also im Grunde Ihre eigene Frage beantwortet? :)
CodingWithSpike
2
Dies ist der alte Weg, um es zu umgehen. Schauen Sie sich die .gitattributes-Datei an.
eftshift0
176

Zeilenendformat, das im Betriebssystem verwendet wird

  • Fenster: CR(Carriage Return \r) und LF(Zeilenvor \n) Paar
  • OSX, Linux: LF(LineFeed \n)

Wir können git so konfigurieren, dass Zeilenzeilenformate für jedes Betriebssystem auf zwei Arten automatisch korrigiert werden.

  1. Git Globale Konfiguration
  2. Verwenden Sie .gitattributesDatei

Globale Konfiguration

Unter Linux / OSX
git config --global core.autocrlf input

Dies beheben Sie CRLFzu , LFwenn Sie begehen.

In Windows
git config --global core.autocrlf true

Dadurch wird sichergestellt, dass beim Auschecken in Windows alle LFin konvertiert werdenCRLF

.gitattributes-Datei

Es ist eine gute Idee, eine .gitattributesDatei zu behalten , da wir nicht erwarten möchten, dass jeder in unserem Team seine Konfiguration festlegt. Diese Datei sollte im Stammpfad von repo bleiben, und falls vorhanden, wird git dies respektieren.

* text=auto

Dadurch werden alle Dateien als Textdateien behandelt und in die Zeile des Betriebssystems konvertiert, die beim Auschecken endet, und LFautomatisch wieder beim Festschreiben. Wenn Sie es explizit mitteilen möchten, verwenden Sie

* text eol=crlf
* text eol=lf

Der erste dient zum Auschecken und der zweite zum Festschreiben.

*.jpg binary

Behandeln Sie alle .jpgBilder unabhängig vom Pfad als Binärdateien. Es ist also keine Konvertierung erforderlich.

Oder Sie können Pfadqualifizierer hinzufügen:

my_path/**/*.jpg binary
Jasnan
quelle
3
Was ist mit OS X, das nur CR(Wagenrücklauf) verwendet?
jww
23
Legacy-MacOS (dh MacOS 9 und früher) wird CRallein verwendet, OS X jedoch im Allgemeinen LF.
Zachary Ware
2
Kann ich es * text eol=lfzweimal verwenden, um es unter LFWindows auszuchecken ?
mbomb007
1
Nach gitattributes Dokumentation Einstellung * text=autokann git entscheiden , ob der Inhalt Text ist oder nicht. Das Erzwingen, dass alle Dateien Text sind, sollte * textnur sein.
Adrian W
Wie stelle ich eol=crDateien unter Mac OS 9 und anderen älteren Plattformen ein?
NobleUplift
36

Für ein Endlager Festiger - Lösung, die für alle Entwickler neu verteilt werden kann, überprüfen Sie das aus Text - Attribute in der .gitattributes Datei. Auf diese Weise müssen Entwickler ihre eigenen Zeilenenden nicht manuell im Repository festlegen. Da unterschiedliche Repositorys unterschiedliche Zeilenendstile haben können, ist global core.autocrlf zumindest meiner Meinung nach nicht die beste.

Zum Beispiel das Deaktivieren dieses Attributs für einen bestimmten Pfad [ . - text] zwingt git, beim Ein- und Auschecken die Zeilenenden nicht zu berühren. Meiner Meinung nach ist dies das beste Verhalten, da die meisten modernen Texteditoren beide Arten von Zeilenenden verarbeiten können. Wenn Sie als Entwickler beim Einchecken weiterhin die Konvertierung von Zeilenenden durchführen möchten, können Sie den Pfad so festlegen, dass er mit bestimmten Dateien übereinstimmt, oder das Attribut eol (in .gitattributes) in Ihrem Repository festlegen.

Schauen Sie sich auch diesen verwandten Beitrag an, in dem die Datei und das Textattribut .gitattributes ausführlicher beschrieben werden: Was ist die beste CRLF-Strategie (Wagenrücklauf, Zeilenvorschub) mit Git?

Fazi
quelle
. - textgibt is not a valid attribute name: .gitattributes:1bitte setzencat .gitattributes
jangorecki
3

Für mich war der Trick, den Befehl auszuführen

git config auto.crlf false

Im Ordner des Projekts wollte ich es speziell für ein Projekt.

Dieser Befehl hat die Datei im Pfad {Projektname} /. Git / config (fyi .git ist ein versteckter Ordner) durch Hinzufügen der Zeilen geändert

[auto]
    crlf = false

am Ende der Datei. Ich nehme an, das Ändern der Datei macht den gleichen Trick.

Reise- und Code-Enthusiasten
quelle
1

Wenn Sie die Dateiformate, die vom PC-Format in das UNIX-Format geändert wurden, zurückkonvertieren möchten.

(1) Sie müssen Tortoise GIT neu installieren und im Abschnitt "Line Ending Conversion" sicherstellen, dass Sie die Option "Check out as is - Check in as is" ausgewählt haben.

(2) und behalten Sie die verbleibenden Konfigurationen bei.

(3) Sobald die Installation abgeschlossen ist

(4) Schreiben Sie alle Dateierweiterungen, die in das UNIX-Format konvertiert wurden, in eine Textdatei (extensions.txt).

ex:*.dsp
   *.dsw

(5) Kopieren Sie die Datei in Ihren Klon. Führen Sie den folgenden Befehl in GITBASH aus

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Nishanth
quelle