Kürzlich bin ich auf folgenden Eintrag in einer .gitattributes-Datei gestoßen:
"* text=auto !eol"
Was macht !eol
tun?
Kürzlich bin ich auf folgenden Eintrag in einer .gitattributes-Datei gestoßen:
"* text=auto !eol"
Was macht !eol
tun?
andrei.serea
Git hat 2 Attribute, die sich mit Zeilenende befassen:
Dokumentation sagt:
Dieses Attribut aktiviert und steuert die End-of-Line-Normalisierung. Wenn eine Textdatei normalisiert wird, werden ihre Zeilenenden im Repository in LF konvertiert
Dies bedeutet effektiv, dass beim Festschreiben an das Repo Zeilenenden in LF konvertiert werden
eol
Dokumentation sagt:
Dieses Attribut legt einen bestimmten Zeilenendestil fest, der im Arbeitsverzeichnis verwendet werden soll. Es ermöglicht eine End-of-Line-Normalisierung ohne Inhaltsprüfungen, wodurch das Textattribut effektiv gesetzt wird.
Also während die text
Attribut beeinflusst, wie die Datei IN THE REPO aussehen wird, eol
wirkt sich darauf aus, wie die Datei im Arbeitsverzeichnis aussieht.
Nun kann ein Attribut 4 Zustände haben:
ohne Wert gesetzt
Beispiel: * text
ungesetzt
Beispiel: * -text
mit einem bestimmten Wert festlegen
Beispiel: * text=auto
nicht spezifiziert
Beispiel: * !text
So, * text=auto !eol
bedeutet dies:
Alle Dateien haben das Attribut text
einstellen auto
und die eol
Attribut nicht spezifiziert. Wenn wir die Dokumentation lesen, finden wir das heraus text=auto
bedeutet, dass Sie Git entscheiden lassen, ob eine Datei Text ist, und wenn ja, wird sie normalisiert (Zeilenenden im Repo auf LF setzen).
!eol
bedeutet, dass das Attribut eol
explizit auf unspecified gesetzt ist. In diesem Fall ist es dasselbe, als würde man es überhaupt nicht angeben und Git anweisen, sich die core.autocrlf
und core.eol
Konfigurationseinstellungen, um zu sehen, wie mit Zeilenenden im Arbeitsverzeichnis umgegangen wird. Beachten Sie Folgendes:
Das
core.eol
Konfigurationsvariable steuert, welche Zeilenenden Git für normalisierte Dateien in Ihrem Arbeitsverzeichnis verwendet; Standardmäßig wird das native Zeilenende für Ihre Plattform oder CRLF verwendet, wenncore.autocrlf
eingestellt ist.
Aber Sie würden verwenden !eol
in einer Situation wie der folgenden:
* text=auto eol=crlf
test.txt !eol
im Grunde außer Kraft setzen eol
Attribut von CRLF bis nicht spezifiziert zum test.txt
. Das bedeutet für alle Dateien außer test.txt
, konvertiert Git Zeilenenden beim Auschecken in CRLF. Zum test.txt
Git wird auf die zurückgreifen core.autocrlf
und core.eol
Konfigurationseinstellungen, sodass das Zeilenende auf jedem System entweder LF oder CRLF sein kann.
* text=auto !eol
impliziert:
Warum NEIN eol-Konvertierung? (Das !
ist zum Überschreiben, nicht zum Negieren.)
– Michael
23. Januar 2014 um 8:31 Uhr
@michas Ich bin mir nicht sicher, was hier dein Zweifel ist — !eol
im vorstehenden gilt nur zu Dateien, die sind nicht Textdateien.
– devnull
23. Januar 2014 um 8:39 Uhr
@devnull Wie kommst du darauf? !eol
gilt für Dateien, die sind nicht Text? Es ist auf der gleichen Linie wie die *
Platzhalter, also bedeutet es für mich, dass die explizite Einstellung für entfernt wird eol
aber nicht sicher, was die Standardeinstellung ist eol
ist. Dies würde für alle Dateien gelten, richtig? Ihre Antwort ist verwirrend.
– void.pointer
11. Februar 2014 um 17:35 Uhr
@RobertDailey Du scheinst das ignoriert zu haben text=auto
Teil!
– devnull
11. Februar 2014 um 17:39 Uhr
@RobertDailey Stellen Sie sich das so vor: *
sagt alle Dateien abgleichen, text=auto
sagt Textdateien gemäß OS-abhängiger EOL handhaben, also !eol
gilt für den Rest, also binär.
– devnull
11. Februar 2014 um 17:50 Uhr
Es deaktiviert im Grunde eol
laut dem Dokumentation:
Manchmal müssen Sie die Einstellung eines Attributs für einen Pfad in den Status „Unspecified“ überschreiben. Dies kann durch Auflisten des Namens des Attributs mit vorangestelltem Ausrufezeichen ! erfolgen.
eol
macht folgendes:
Dieses Attribut legt einen bestimmten Zeilenendestil fest, der im Arbeitsverzeichnis verwendet werden soll. Es ermöglicht eine End-of-Line-Normalisierung ohne Inhaltsprüfungen, wodurch das Textattribut effektiv gesetzt wird.
Michael
Kurzfassung:
Wenn Git entscheidet, dass der Inhalt Text ist, werden seine Zeilenenden beim Einchecken auf LF normalisiert. Setzen Sie alle expliziten eol-Einstellungen in einigen verschachtelten .gitattributes-Dateien zurück.
Sehen man gitattributes
:
Each line in gitattributes file is of form:
pattern attr1 attr2 ...
Sometimes you would need to override an setting of an attribute for a path to
Unspecified state. This can be done by listing the name of the attribute
prefixed with an exclamation point !.
text
This attribute enables and controls end-of-line normalization. When a text
file is normalized, its line endings are converted to LF in the
repository. To control what line ending style is used in the working
directory, use the eol attribute for a single file and the core.eol
configuration variable for all text files.
Set to string value "auto"
When text is set to "auto", the path is marked for automatic
end-of-line normalization. If Git decides that the content is text,
its line endings are normalized to LF on checkin.
eol
This attribute sets a specific line-ending style to be used in the working
directory. It enables end-of-line normalization without any content
checks, effectively setting the text attribute.
eol = Zeilenende (plausible Vermutung).
!eol
würde höchstwahrscheinlich etwas damit zu tun haben nicht Ende der Linie.– Blutende Finger
23. Januar 2014 um 8:23 Uhr