Surtout le .gitattributes
fichier a * text=auto
. Quel est le but de text=auto
ce fichier?
Surtout le .gitattributes
fichier a * text=auto
. Quel est le but de text=auto
ce fichier?
Réponses:
À partir de la documentation :
Chaque ligne dans
.gitattributes
(ou.git/info/attributes
) fichier est de la forme:pattern attr1 attr2 ...
Donc, ici, le modèle est *
, ce qui signifie tous les fichiers, et l'attribut est text=auto
.
Que fait text=auto
-on? De la documentation:
Lorsque le texte est défini sur "auto", le chemin est marqué pour la normalisation automatique de fin de ligne. Si Git décide que le contenu est du texte, ses fins de ligne sont normalisées à LF lors de l'archivage.
Quel est le comportement par défaut s'il n'est pas activé?
Non spécifié
Si l'attribut text n'est pas spécifié, Git utilise la variable de configuration core.autocrlf pour déterminer si le fichier doit être converti.
Que fait core.autocrlf
-on? À partir de la documentation:
core.autocrlf
Définir cette variable sur "true" revient presque au même que définir l'attribut de texte sur "auto" sur tous les fichiers, sauf que la normalisation des fichiers texte n'est pas garantie: les fichiers contenant CRLF dans le référentiel ne seront pas touchés. Utilisez ce paramètre si vous souhaitez avoir des fins de ligne CRLF dans votre répertoire de travail même si le référentiel n'a pas de fins de ligne normalisées. Cette variable peut être définie sur entrée, auquel cas aucune conversion de sortie n'est effectuée.
Si vous pensez que tout cela est aussi clair que la boue, vous n'êtes pas seul.
Voici ce que * text=auto
fait dans mes mots: quand quelqu'un valide un fichier, Git devine si ce fichier est un fichier texte ou non, et si c'est le cas, il commettra une version du fichier où tous les octets CR + LF sont remplacés par des octets LF. Cela n'affecte pas directement l'aspect des fichiers dans l'arborescence de travail, il existe d'autres paramètres qui convertiront les octets LF en octets CR + LF lors de l'extraction d'un fichier.
Je ne recommanderais pas de mettre * text=auto
dans le .gitattributes
fichier. Au lieu de cela, je recommanderais quelque chose comme ceci:
*.txt text
*.html text
*.css text
*.js text
Cela désigne explicitement les fichiers qui sont des fichiers texte, qui sont convertis en CRLF en LF dans la base de données d'objets (mais pas nécessairement dans l'arborescence de travail). Nous avions un dépôt avec * text=auto
, et Git a deviné à tort pour un fichier image qu'il s'agissait d'un fichier texte, ce qui l'a corrompu en remplaçant les octets CR + LF par des octets LF dans la base de données d'objets. Ce n'était pas amusant à déboguer.
Si vous devez utiliser * text=auto
, placez-le comme première ligne .gitattributes
afin que les lignes suivantes puissent la remplacer. Cela semble devenir une pratique de plus en plus populaire.
everyone
fait référence à git-scm
, c'est probablement parce qu'ils développent un package * nix et donc utiliser le caractère de nouvelle ligne * nix est normal .
git-scm
venant de * nix. MacOS utilise LF. Seul Windows (compte tenu des systèmes d'exploitation de flux principal uniquement) utilise CRLF. Cela rend la tâche plus difficile pour les développeurs utilisant les outils * nix sous Windows et pour tout le monde lors de l'échange de fichiers. Voir aussi Pourquoi CRLF .
*.txt text=auto
et *.txt text
s'il vous plaît? Je pensais que les 4 lignes de votre exemple ci-dessus auraient dû être text=auto
, pas seulement text
après l'extension de fichier. Les fichiers d'empreintes KiCad, par exemple (extension ".kicad_mod"), sont normalisés en utilisant cette ligne dans leur fichier gitattributes: *.kicad_mod text=auto
( kicad-pcb.org/libraries/klc/G1.7 ).
Il garantit que les fins de ligne sont normalisées. Source: Kernel.org
Lorsque le texte est défini sur "auto", le chemin est marqué pour la normalisation automatique de fin de ligne. Si git décide que le contenu est du texte, ses fins de ligne sont normalisées à LF lors de l'archivage.
Si vous souhaitez interagir avec un système de gestion de code source qui applique la normalisation de fin de ligne, ou si vous voulez simplement que tous les fichiers texte de votre référentiel soient normalisés, vous devez à la place définir l'attribut texte sur "auto" pour tous les fichiers.
Cela garantit que tous les fichiers que git considère comme du texte auront des fins de ligne normalisées (LF) dans le référentiel.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, même sur les fenêtres?
Cette configuration concerne la manière dont les fins de ligne sont gérées. Lorsqu'elle est activée, toutes les fins de ligne sont converties en LF dans le référentiel. Il existe d'autres indicateurs pour gérer la façon dont les fins de ligne sont converties dans votre répertoire de travail. Informations complètes sur le problème ici: https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html