2009-10-21 8 views
46

J'ai configuré Git afin qu'il ne commette pas des fins de ligne incohérentes. Le problème avec cela est qu'une pile entière de fichiers semble être modifiée même si elle ne l'est pas. Que puis-je taper pour faire en sorte que ces extrémités de lignes soient fixées sur le côté local?Faire Git "LF sera remplacé par CRLF" les avertissements disparaissent

# git checkout dev 
M src/au/policy/dao/EmailQueue.java 
M src/au/policy/dao/EmailQueueFactory.java 
M src/au/policy/dao/PolicyPublisher.java 
Already on 'dev' 

# git diff 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueue.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueueFactory.java 
warning: LF will be replaced by CRLF in src/au/policy/dao/PolicyPublisher.java 

C'est ce que j'ai ajouté à mon dossier config git qui semble faire ce que je voulais en dehors de cette question:

autocrlf = true 
+0

Est-il possible de supprimer les fichiers incriminés et de les vérifier de nouveau? – corydoras

+0

Oui, s'il n'y a pas de différence autre que les terminaisons de lien, effacez simplement et relisez les fichiers incriminés. –

+0

Relatif, mais pas nécessairement une question en double: [git remplaçant LF avec CRLF] (http://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf). –

Répondre

16

Vous pouvez simplement supprimer et re-checkout les fichiers incriminés de l'index comme celui-ci:

rm <files> 
git checkout -- <files> 

Ou, si elles sont les seuls fichiers modifiés (attention avec cette commande), vous pouvez écrire des scripts comme ceci:

git diff --name-only --diff-filter=M | xargs rm -- 
git checkout -- . 

sur un système GNU, vous pouvez utiliser un tuyau légèrement plus sûr, mais vous ne semblent pas avoir des espaces ou d'autres caractères dans vos noms de fichiers délimitant dans tous les cas.

git diff -z --name-only --diff-filter=M | xargs -0 rm -- 
24

La seule chose que je peux penser est de vérifier si core.safecrlf est réglé sur warn.

git config --get core.safecrlf

Je pense que valeurs possibles sont true, false et warn. Je crois que le réglage à false résoudra l'avertissement, bien que ce ne soit pas une bonne idée.

+0

Le mettre à faux l'a fait. Merci! –

+1

Cela masque probablement le message tout en conservant l'effet du changement cr/lf. –

+1

La définition de 'safecrlf' à' false 'peut corrompre les fichiers binaires, c'est pourquoi 'warn' est utilisé par défaut. – Walf

60

Cela peut se produire si vous changez core.autocrlf variable config (si je comprends bien votre problème).

Si vous êtes à l'état propre, soit juste après engagement, et vous n'avez pas des changements uncomitted, Forcé re-caisse et l'index suppression devrait faire l'affaire:

La commande ci-dessous git reset --hard HEAD sera faites en sorte que votre branche actuelle pointe vers la dernière validation et que tout le code non validé soit perdu. Assurez-vous de commettre le code ou prendre la sauvegarde

$ rm .git/index 
$ git reset --hard HEAD 

Cela, je pense, se synchroniser les fichiers de la zone de travail, et l'indice (zone de stockage intermédiaire) pour suivre les paramètres CRLF.

+3

Vous connaissez évidemment votre git, travaillé très bien pour moi. Merci! Vraiment! Merci beaucoup! –

+0

devrait considérer cela comme une réponse acceptée. joliment travaillé @ jakub –

2

Essayez cela, il a travaillé pour moi:

cd src/au/policy/dao 
dos2unix 

S'il y a d'autres fichiers dans ce dossier, alors vous aurez envie de le casser dans le suivant (sinon il va essayer de le faire sur tous les fichier dans les sous-répertoires, ce qui peut prendre un certain temps):

cd src/au/policy/dao 
dos2unix EmailQueue.java 
dos2unix EmailQueueFactory.java 
dos2unix PolicyPublisher.java 

il a couru vraiment rapide sur ma machine et fixe toutes les fins de ligne, et il est un peu plus simple et plus facile que certains de ces autres correctifs.

+0

ne fonctionne pas pour moi. – luckytaxi

31

J'ai rencontré ce problème lors de la création d'un nouveau projet Xcode. Ma solution pour ce problème:

En écriture terminale

$: git config --global --edit 

Ensuite, dans le changement de fichier de configuration git safecrlf-faux. Mes paramètres:

[core] 
    autocrlf = input 
    safecrlf = false 

Je sais que git a des outils de ligne cmd pour cela mais ils ne fonctionnent pas pour moi. Puis Xcode crée des dépôts git sans aucun problème.

+2

@Andrei Il est probable que vous utilisiez [vim] (http://www.vim.org/) comme éditeur, appuyez sur Echap pour sortir du mode de saisie et tapez ': wq' pour sauvegarder et quitter. – GP89

+0

la seule solution qui a fonctionné pour moi, tous les autres ont échoué, sur "git version 1.8.1.msysgit.1" windows 7 (git bash) –

Questions connexes