Meistens hat .gitattributes
Datei * text=auto
. Was ist der Zweck text=auto
in dieser Datei?
Meistens hat .gitattributes
Datei * text=auto
. Was ist der Zweck text=auto
in dieser Datei?
Antworten:
Aus den Dokumenten :
Jede Zeile in
.gitattributes
(oder.git/info/attributes
) Datei hat folgende Form:pattern attr1 attr2 ...
Hier ist also das Muster *
, dh alle Dateien, und das Attribut ist text=auto
.
Was macht text=auto
das Aus der Dokumentation:
Wenn der Text auf "auto" eingestellt ist, wird der Pfad für die automatische Normalisierung am Zeilenende markiert. Wenn Git entscheidet, dass der Inhalt Text ist, werden seine Zeilenenden beim Einchecken auf LF normalisiert.
Was ist das Standardverhalten, wenn es nicht aktiviert ist?
Nicht spezifiziert
Wenn das Textattribut nicht angegeben ist, verwendet Git die Konfigurationsvariable core.autocrlf, um zu bestimmen, ob die Datei konvertiert werden soll.
Was macht core.autocrlf
das Aus den Dokumenten:
core.autocrlf
Das Setzen dieser Variablen auf "true" entspricht fast dem Setzen des Textattributs auf "auto" für alle Dateien, mit der Ausnahme, dass die Normalisierung von Textdateien nicht garantiert wird: Dateien, die CRLF im Repository enthalten, werden nicht berührt. Verwenden Sie diese Einstellung, wenn Sie CRLF-Zeilenenden in Ihrem Arbeitsverzeichnis haben möchten, obwohl das Repository keine normalisierten Zeilenenden hat. Diese Variable kann auf Eingabe gesetzt werden. In diesem Fall wird keine Ausgabekonvertierung durchgeführt.
Wenn Sie das alles so klar wie Schlamm finden, sind Sie nicht allein.
* text=auto
In meinen Worten bedeutet Folgendes: Wenn jemand eine Datei festschreibt, errät Git, ob es sich bei dieser Datei um eine Textdatei handelt, und wenn dies der Fall ist, wird eine Version der Datei festgeschrieben, in der alle CR + LF-Bytes durch LF-Bytes ersetzt werden. Es hat keinen direkten Einfluss darauf, wie Dateien im Arbeitsbaum aussehen. Es gibt andere Einstellungen, die LF-Bytes beim Auschecken einer Datei in CR + LF-Bytes konvertieren.
Ich würde nicht empfehlen, * text=auto
die .gitattributes
Datei einzutragen. Stattdessen würde ich so etwas empfehlen:
*.txt text
*.html text
*.css text
*.js text
Dies gibt explizit an, welche Dateien Textdateien sind, die CRLF in der Objektdatenbank in LF konvertieren (aber nicht unbedingt im Arbeitsbaum). Wir hatten ein Repo mit * text=auto
und Git vermutete falsch für eine Bilddatei, dass es sich um eine Textdatei handelte, was dazu führte, dass sie beschädigt wurde, da CR + LF-Bytes durch LF-Bytes in der Objektdatenbank ersetzt wurden. Das Debuggen hat keinen Spaß gemacht.
Wenn Sie verwenden müssen * text=auto
, geben Sie es als erste Zeile ein .gitattributes
, damit die späteren Zeilen es überschreiben können. Dies scheint eine zunehmend populäre Praxis zu werden.
everyone
beziehen, git-scm
liegt dies wahrscheinlich daran, dass sie ein * nix-Paket entwickeln und daher die Verwendung von * nix-Zeilenumbrüchen normal ist .
git-scm
* nix. MacOS verwendet LF. Nur Windows (nur unter Berücksichtigung von Mainstream-Betriebssystemen) verwendet CRLF. Dies macht es für Entwickler, die * nix-Tools unter Windows verwenden, und für alle beim Austausch von Dateien schwieriger. Siehe auch Warum CRLF .
*.txt text=auto
und *.txt text
bitte erklären ? Ich dachte, alle 4 Zeilen in Ihrem obigen Beispiel hätten sein sollen text=auto
, nicht nur text
nach der Dateierweiterung. Beispielsweise werden KiCad-Footprint-Dateien (Erweiterung ".kicad_mod") mithilfe dieser Zeile in ihrer gitattributes-Datei normalisiert: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).
Es stellt sicher, dass die Zeilenenden normalisiert werden. Quelle: Kernel.org
Wenn der Text auf "auto" eingestellt ist, wird der Pfad für die automatische Normalisierung am Zeilenende markiert. Wenn git entscheidet, dass der Inhalt Text ist, werden seine Zeilenenden beim Einchecken auf LF normalisiert.
Wenn Sie mit einem Quellcode-Verwaltungssystem zusammenarbeiten möchten, das die Normalisierung am Zeilenende erzwingt, oder einfach alle Textdateien in Ihrem Repository normalisieren möchten, sollten Sie stattdessen das Textattribut für alle Dateien auf "auto" setzen.
Dadurch wird sichergestellt, dass alle Dateien, die git als Text betrachtet, normalisierte Zeilenenden (LF) im Repository haben.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
auch unter Windows unverändert bleiben ?
Diese Konfiguration bezieht sich auf den Umgang mit Zeilenenden. Wenn diese Option aktiviert ist, werden alle Zeilenenden im Repository in LF konvertiert. Es gibt andere Flags, die sich mit der Konvertierung von Zeilenenden in Ihrem Arbeitsverzeichnis befassen. Ausführliche Informationen zu diesem Thema finden Sie hier: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html