web-dev-qa-db-fra.com

Essayer de valider des fichiers Git mais en obtenant :: fatal: LF serait remplacé par CRLF dans <un fichier dans le dépôt>

Lorsque j'essaie de valider certains fichiers modifiés, le message d'erreur suivant s'affiche avec TortoiseGit

fatal: LF would be replaced by CRLF in <some file in the repo>

Maintenant, avant d’obtenir les réponses LF vs CRLF habituelles, je sais et comprends de quoi parle le débat. Deuxièmement, j'ai également défini mes paramètres globaux sur:

core.autocrlf true

Troisièmement, J'ai un fichier .gitattributes .

Je veux donc m'assurer que les fichiers sont forcés d'avoir CRLF.

Ce que je ne comprends pas, c'est que cela dit FATAL et m'empêche de continuer. Un avertissement? Sûr! Est-ce que je sais ce que j'essaie de faire? Je fais! 

Je veux juste qu'il convertisse en silence et STFU.

Sinon, s'il est obligé de me bloquer, est-il possible de mettre à jour CRLF tous les fichiers du référentiel afin que cet avertissement soit perdu?

Ces référentiels sont privés, ils ne seront donc jamais développés en dehors de Windows + Visual Studio. 

Quelqu'un peut-il s'il vous plaît aider sans dénigrer ce fil dans une guerre religieuse autocrlf TRUE vs autocrlf FALSE.

50
Pure.Krome

Vous voudrez peut-être définir core.safecrlf sur "avertir" si vous souhaitez uniquement un avertissement et non une erreur fatale.

De "git config" page de mange :

core.safecrlf

Si la valeur est true, git vérifie si la conversion de CRLF est réversible lorsque la conversion de fin de ligne est active. Git vérifiera si une commande modifie un fichier dans l'arbre de travail, directement ou indirectement.
Par exemple, la validation d'un fichier suivie de l'extraction du même fichier doit générer le fichier d'origine dans l'arbre de travail. Si ce n'est pas le cas pour le paramètre actuel de core.autocrlf, git rejettera le fichier.
La variable peut être définie sur "warn", auquel cas git avertira uniquement d'une conversion irréversible mais poursuivra l'opération.

La conversion CRLF présente un léger risque de corruption des données.
Lorsqu'il est activé, git convertira CRLF en LF lors de la validation et LF en CRLF lors de la commande.
Un fichier contenant une combinaison de LF et de CRLF avant la validation ne peut pas être recréé par git.
Pour les fichiers texte, c’est la bonne chose à faire: cela corrige les fins de ligne de sorte que nous n’avions que les finitions de ligne LF dans le référentiel.
Mais pour les fichiers binaires classés accidentellement comme texte, la conversion peut corrompre les données.

Si vous reconnaissez tôt une telle corruption, vous pouvez facilement la réparer en définissant explicitement le type de conversion dans .gitattributes.
Juste après avoir validé, vous avez toujours le fichier d'origine dans votre arbre de travail et ce fichier n'est pas encore corrompu. Vous pouvez explicitement indiquer à git que ce fichier est binaire et git le gérera de manière appropriée.

Malheureusement, l'effet souhaité du nettoyage des fichiers texte avec des fins de ligne mixtes et l'effet indésirable de la corruption des fichiers binaires ne peuvent pas être distingués.
Dans les deux cas, les CRLF sont supprimés de manière irréversible. Pour les fichiers texte, c’est la bonne chose à faire car les CRLF sont des fins de ligne, alors que pour les fichiers binaires, leur conversion corrompt les données.

Je préfère identifier les fichiers ou types de fichiers exacts. Je veux forcer l'eol avec uniquement les fichiers .gitattributes (avec les paramètres core.eol que vous avez) et laissez autocrlf à false.

Dans le cas de textes avec eol mixte, cet article de blog suggère, par exemple, de:

Si Notepad ++ est installé sur votre ordinateur, procédez comme suit.

  1. Ouvrez le fichier qui a le problème Fatal.
  2. Cliquez sur Edit -> EOL Conversion, puis sélectionnez le format Windows ou celui que vous rencontrez avec un problème. 

Attention, si vous avez Git 2.17 ou 2.18: une régression introduite dans 8462ff4 ("convert_to_git(): safe_crlf/checksafe devient int conv_flags", 2018-01-13, Git 2.17.0) dans Git 2.17, cycle provoquant autocrlf réécrit pour produire un message d'avertissement malgré le réglage de safecrlf=false.

Voir commit 6cb0912 (04 juin 2018) de Anthony Sottile (asottile) .
(Fusionnée par Junio ​​C Hamano - gitster - in commit 8063ff9 , 28 juin 2018)

63
VonC
git config --global core.safecrlf false
19
Snowcrash

Cela désactivera l'avertissement fatal crlf.

git config core.autocrlf false
git config core.safecrlf false
9
sanjeet bisht

Puisque votre rapport est privé, vous pouvez définir git-config comme ceci:

git config --global core.autocrlf false

Cela résoudra votre problème.Si vous avez d'autres questions, vous pouvez lire le Pro git》 :

Si vous êtes un programmeur Windows réalisant un projet uniquement Windows,, vous pouvez alors désactiver cette fonctionnalité et enregistrer les retours chariot dans le référentiel en définissant la valeur de configuration sur false: $ git config --global core.autocrlf false

Mais lorsque vous collaborez, vous devriez mieux faire les tâches suivantes:

  1. add .gitattributes, Github help-Traitement des fins de ligne sera utile.
  2. git config --global core.safecrlf true
    • fenêtres: git config --global core.autocrlf true
    • mac ou linux: git config --global core.autocrlf input

Vous voudrez peut-être lire Git docs-git config pour plus d’informations.

3
Wade

git config --global core.autocrlf false va archiver des fichiers avec CRLF, ce qui n’est pas utilisé.

J'ai remarqué sous Windows qu'avec core.autocrlf true, Git n'aimait pas les fichiers avec LF et core.autocrlf input n'aimait pas CRLF.

Donc: valider les fichiers CRLF avec core.autocrlf true et LF fichiers avec core.autocrlf input (ou les convertir en CRLF).

Généralement, les fichiers avec LF sont générés automatiquement par des générateurs de code (par exemple, https://start.spring.io ou http://yeoman.io/

1
GKislin

Avec le fichier .gitattributes, utilisez

*.h text=auto
*.cpp text=auto
*.txt text=auto

comme indiqué dans https://git-scm.com/docs/gitattributes .

0
MyGeertRo