2008-10-28 10 views
9

J'ai un fichier Java de taille moyenne. Chaque fois que je modifie un de mes fichiers, BuildTable.java, Git le signale comme un changement massif, même s'il ne s'agit que d'une ligne ou deux. BuildTable.java est d'environ 200 lignes et la modification de cette validation n'a modifié qu'une seule ligne.Git pense que je réécris un de mes fichiers chaque fois que je fais un petit changement

ouputs git-diff ceci:

--- a/src/BuildTable.java 
+++ b/src/BuildTable.java 
@@ -1 +1 @@ 
-import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 
+import java.io.FileNotFoundException;^Mimport java.io.FileReader;^Mimport java.io.InputStreamReader;^Mimport java.io.PushbackReader;^Mimport java.util.ArrayList;^Mimport 
\ No newline at end of file 

Après avoir fait un git commit -a-

Created commit fe43985: better error notifications 
3 files changed, 54 insertions(+), 50 deletions(-) 
rewrite src/BuildTable.java (78%) 

est Git voir ce fichier comme binaire ou quelque chose? Est-ce un problème? Si c'est le cas, comment puis-je résoudre ce problème?

Répondre

20

Pour résoudre ce problème, je n'avais pas besoin de modifier les paramètres git de base, car les fins de ligne par défaut générées étaient correctes, c'était juste que ce fichier particulier était altéré. Pour résoudre ce problème, j'ai ouvert vim et exécuté la commande suivante

:%s/^M/\r/g 

de noter que pour les commandes «^M » vous devez taper Ctrl-V, puis ctrl-M.

+0

J'ai cherché pendant des jours, et vous venez de résoudre mon problème. Merci. – Jared

+0

'sed -i 's # \ r # \ n # g'' fonctionne aussi –

27

De toute évidence, git n'aime pas vos fins de ligne de style mac (CR uniquement). Son algorithme diff utilise LF comme séparateur de ligne.

Fixez vos fichiers avec des fins de ligne de style Windows (CR LF) ou unix (LF uniquement).

+2

OS X utilise les terminaisons LF comme tous les autres styles d'Unix. –

+8

Les fins de ligne dites "mac-style" étaient standard sur Mac jusqu'à MacOS 9. Et seulement sur MacOS. – ddaa

+7

Il est assez triste que cette réponse ait été démodée quatre fois, alors que le diagnostic était correct, comme l'auteur de la question l'a noté dans sa réponse. – ddaa

5

Définissez core.autocrlf et core.safecrlf avec git-config. Git convertira automatiquement les fins de ligne lors du transfert de/vers le magasin d'objets. Vous devrez peut-être vous engager à stocker les "nouvelles" fins.

A en juger par votre collé par exemple, vous pourriez être aussi la souffrance de « style ancien Mac fin de ligne » (grâce à ddaa et Charles Bailey pour l'indice), qui ne sont CR nus s sans LF, un cas non pris en charge par git. Si cela est vrai (vérifiez avec un éditeur hexadécimal), utilisez un outil comme recode pour traduire cette poubelle dans un format du 21ème siècle, comme LF -une seule fin de ligne Unix.

+1

core.autocrlf ne va pas aider dans ce cas (fins de ligne Mac à l'ancienne). Pour citer la source git actuelle: "Nous n'allons pas essayer de convertir des trucs qui ont des personnages CR nus. –

0
git diff -b 

Ignore les changements de fin de ligne lorsque vous affichez les différences.

Questions connexes