Comment faire
état git
ignorer les différences de fin de ligne?
Informations de fond:
J'utilise au hasard Windows et Linux pour travailler sur le projet. Le projet est dans Dropbox.
J'ai trouvé beaucoup de choses sur la façon dont git diff ignore les fins de ligne. Depuis que j'utilise meld git diff ouvre meld pour chaque fichier. Et meld dit "fichier identique".
Alors, comment éviter cela. Git ne devrait ouvrir la fusion que pour les fichiers modifiés. Et git status ne devrait pas signaler les fichiers comme modifiés si seule la fin du fichier est différente.
EDIT: Cause:
Cela s'est produit à cause de ce paramètre sur Windows
core.autocrlf true
J'ai donc vérifié la copie de travail sous Linux et défini core.autocrlf sur false sous Windows.
Ce serait toujours bien de savoir comment faire ignorer les différentes nouvelles lignes de git status.
core.autocrlf
soit la cause première sous Windows, mais aussi un remède sous Linux. Le problème est qu'ilautocrlf
est global sous Windows et que le dépôt n'a pas ce paramètre.git/config
. En exécutant un local,git config core.autocrlf true
je me suis débarrassé des modifications fausses sur ma copie de travail NTFS clonée sous Windows mais accessible sous Linux. (maintenant il n'y a que des changements fallacieux avec des liens symboliques - les liens symboliques NTFS FONCTIONNENT sur les montages fuseblk, mais Git les voit comme modifiés ...)Réponses:
Essayez de définir la valeur core.autocrlf comme ceci:
la source
core.autocrlf true
est un paramètre de travail dans CygWin.core.safecrlf false
est un paramètre de travail dans git bash ou mingwUtilisez plutôt .gitattributes, avec le paramètre suivant:
.gitattributes se trouverait dans le même répertoire que votre .gitconfig global. Si .gitattributes n'existe pas, ajoutez-le à ce répertoire. Après avoir ajouté / modifié .gitattributes, vous devrez effectuer une réinitialisation matérielle du référentiel afin d'appliquer avec succès les modifications aux fichiers existants.
la source
git status
. Cela change en fait la façon dont les fichiers sont archivés dans le référentiel. ref: git-scm.com/docs/gitattributes#_code_text_codeCette réponse semble pertinente puisque l'OP fait référence à un besoin de solution multi-OS. Cet article d'aide Github détaille les approches disponibles pour gérer les fins de lignes entre les systèmes d'exploitation. Il existe des approches globales et per-repo pour gérer les fins de ligne cross-os.
Approche globale
Configurez la gestion des fins de ligne Git sous Linux ou OS X:
Configurez la gestion des fins de ligne Git sous Windows:
Approche par pension:
À la racine de votre
.gitattributes
dépôt , créez un fichier et définissez les paramètres de fin de ligne pour vos fichiers de projet, une ligne à la fois au format suivant:path_regex line-ending-settings
oùline-ending-settings
est l'un des éléments suivants:La
text
valeur peut être configurée davantage pour indiquer à Git comment gérer les fins de ligne pour les fichiers correspondants:text
- Modifie les fins de ligne en terminaisons de ligne natives du système d'exploitation.text eol=crlf
- Convertit les fins de ligne à laCRLF
caisse.text eol=lf
- Convertit les fins de ligne à laLF
caisse.text=auto
- Par défaut sensible qui laisse la gestion de la ligne à la discrétion de Git.Voici le contenu d'un exemple de fichier .gitattributes:
Plus d'informations sur la façon d'actualiser votre dépôt après avoir modifié les paramètres de fin de ligne ici . Tldr:
Dans certains cas, c'est tout ce qui doit être fait. D'autres devront peut-être effectuer les étapes supplémentaires suivantes:
la source
Problème lié aux commandes git sur le système d'exploitation Windows:
Attention: LF sera remplacé par CRLF dans ...
Le fichier aura ses fins de ligne d'origine dans votre répertoire de travail.
Résolution :
Aucun message d'avertissement n'apparaît.
la source
J'ai créé un script pour ignorer les différences de fin de ligne:
Il affichera les fichiers qui ne sont pas ajoutés à la liste de validation et qui ont été modifiés (après avoir ignoré les différences dans les fins de ligne). Vous pouvez ajouter l'argument "add" pour ajouter ces fichiers à votre commit.
Code source: https://github.com/lepe/scripts/blob/master/gitdiff.pl
Mises à jour :
la source
git status --porcelain 2>/dev/null | grep '^ M ' | awk '{ print \$2 }'
; à ceci: my @mods =git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-
;J'utilise à la fois Windows et Linux, mais la solution
core.autocrlf true
ne m'a pas aidé. Je n'ai même rien changé aprèsgit checkout <filename>
.J'utilise donc une solution de contournement pour remplacer
git status
-gitstatus.sh
Je viens de comparer
md5sum
un fichier et son frère au référentiel.Exemple de sortie:
la source