Was macht „!eol“ in Gittributen?

Lesezeit: 4 Minuten

Kürzlich bin ich auf folgenden Eintrag in einer .gitattributes-Datei gestoßen:

"* text=auto !eol"

Was macht !eol tun?

  • 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

Benutzer-Avatar
andrei.serea

Git hat 2 Attribute, die sich mit Zeilenende befassen:

  1. Text

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

  1. 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, wenn core.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:

  • Für Binärdateien wird keine EOL-Konvertierung (End of Line) durchgeführt.
  • Bei Textdateien werden EOLs beim Auschecken der Datei in betriebssystemabhängige EOL (Konvertieren in LF für Unix und CR+LF für Windows) konvertiert und beim Einchecken durch LF ersetzt.

  • 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 eolaber 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.

Benutzer-Avatar
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.

1217910cookie-checkWas macht „!eol“ in Gittributen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy