Vor kurzem stieß ich auf den folgenden Eintrag in einer .gitattributes Datei:Was macht "! Eol" in gitattributes?
"* text=auto !eol"
Was tut !eol
?
Vor kurzem stieß ich auf den folgenden Eintrag in einer .gitattributes Datei:Was macht "! Eol" in gitattributes?
"* text=auto !eol"
Was tut !eol
?
Es deaktiviert grundsätzlich eol
nach dem documentation:
Manchmal benötigen Sie eine Einstellung eines Attributs für einen Pfad zu unspezifisch Zustand außer Kraft zu setzen. Dies kann durch Auflisten des Namens des -Attributs, dem ein Ausrufezeichen vorangestellt ist, erfolgen.
eol
macht folgende:
Dieses Attribut legt einen bestimmten Zeilenende-Stil im Arbeits Verzeichnis verwendet werden. Es aktiviert die End-of-Line-Normalisierung ohne Inhalt überprüft, effektiv das Textattribut festlegen.
Kurzversion:
Wenn Git entscheidet, dass der Inhalt Text ist, sind die Zeilenenden normalisiert auf checkin an LF. Setzen Sie in einer verschachtelten .gitattributes-Datei eine explizite eol-Einstellung zurück.
Siehe 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.
* text=auto !eol
impliziert:
Warum ** NEIN ** EOL-Konvertierung? (Das '!' Ist zum Überschreiben, nicht für die Negation.) – michas
@michas Ich bin mir nicht sicher, was Sie hier bezweifeln - '! Eol' in obigem gilt nur für Dateien, die __nicht__ Textdateien sind. – devnull
@devnull Wie finden Sie, dass "! Eol" für Dateien gilt, die ** nicht ** Text sind? Es ist in der gleichen Zeile wie das '*' Wildcard, also bedeutet es für mich, dass es die explizite Einstellung für 'eol' entfernt, aber nicht sicher ist, was der Standard für' eol' ist. Dies würde für alle Dateien gelten, oder? Deine Antwort ist verwirrend. –
Git hat 2 Attribute, die sich mit End-of-Linien:
Dokumentation sagt:
Dieses Attribut aktiviert und steuert die End-of-Line-Normalisierung.Wenn eine Textdatei normalisiert wird, werden seine Zeilenende LF im Repository
umgewandelt Dies bedeutet effektiv, dass, wenn Sie an den Repo begehen, wird es Zeilenende konvertieren „an LF
Dokumentation sagt:
Dieses Attribut legt einen bestimmten Zeilenende-Stil im Arbeitsverzeichnis verwendet werden. Es ermöglicht die End-of-Line-Normalisierung ohne Inhaltsüberprüfungen, wodurch das Textattribut effektiv festgelegt wird. So
während des Text Attribut beeinflusst, wie die Datei wie IM REPO aussehen wird, eol
beeinflusst, wie die Datei wie im Arbeitsverzeichnis aussieht.
Nun kann ein Attribut 4 Zustände hat:
Satz ohne Wert
Beispiel: * text
ungesetzt
Beispiel: * -text
Satz mit bestimmtem Wert
Beispiel: * text=auto
unspeci fachter
Beispiel: * !text
So bedeutet * text=auto !eol
dies:
Alle Dateien das Attribut Text auf Auto und das EOL-Attribut nicht spezifizieren haben. Wenn wir die Dokumentation lesen, finden wir heraus, dass text = auto bedeutet, dass Sie git entscheiden lassen, ob eine Datei Text ist und ob es normalisiert wird (setzen Sie Zeilenenden im Repo auf LF).
!eol
bedeutet, dass das Attribut eol explizit auf unspezifiziert gesetzt ist. In diesem Fall ist es dasselbe, als würde es gar nicht spezifiziert, Git anzuweisen, die Einstellung core.eol config zu betrachten, um zu sehen, wie man mit Zeilenenden im Arbeitsverzeichnis umgehen kann. Hinweis:
Die Konfigurationsvariable core.eol steuert, welche Zeilenendungen Git für normalisierte Dateien in Ihrem Arbeitsverzeichnis verwendet. Standardmäßig wird die native Zeilenendung für Ihre Plattform oder CRLF verwendet, wenn core.autocrlf festgelegt ist.
Aber Sie würden verwenden EOL in einer Situation wie folgt aus:
* text=auto eol=CRLF
test.txt !eol
im Grunde das Überschreiben der EOL-Attribut von CRLF-nicht spezifiziert für test.txt. Dies bedeutet, dass Git für alle Dateien außer test.txt die Checkout-EOLs in CRLF konvertiert, aber nichts tut, um test.txt zu testen.
eol = Ende der Zeile (plausible Schätzung). '! eol' hätte höchstwahrscheinlich etwas mit * not * end-of-line zu tun. –