web-dev-qa-db-fra.com

git diff voit le fichier entier comme modifié quand il n'est pas

Le moteur git diff voit un fichier entier comme modifié alors qu'il ne l'a pas été. Par exemple, prenez ce commit: https://github.com/etiago/phpvirtualbox/commit/626e09958384f479f94011ac3b8301bd497aec51

Nous voyons ici que le fichier lib/vboxconnector.php a 2807 ajouts et 2778 suppressions. De plus, après avoir fait un diff git manuel, je trouve qu'en effet, le fichier entier est pris comme une suppression (marqué avec moins) et un nouveau fichier entier est pris comme un ajout. Cependant, les fichiers ont beaucoup en commun que Git a simplement ignoré.

J'ai regardé diff renvoyant le fichier entier pour des fichiers identiques mais cela ne semble pas être le cas car aucun changement d'espace blanc n'existe entre les deux commits.

De plus, en prenant les deux commits du fichier (celui de 626e09958384f479f94011ac3b8301bd497aec51 et 626e09958384f479f94011ac3b8301bd497aec51^1) et en les différenciant avec Meld, j'obtiens la bonne analyse de diff.

J'ai téléchargé les deux validations du fichier sur ma Dropbox pour plus de commodité: commit_1commit_2 .

43
Tiago Espinha

Dans vboxconnector.php_1, chaque ligne se termine par une séquence CRLF.

Dans vboxconnector.php_2, chaque ligne se termine par juste LF.

Ainsi, chaque ligne du fichier a changé.

Essayez d'utiliser git diff --ignore-space-at-eol.

Vous pouvez également trouver des informations utiles dans les réponses à cette question .

66
rob mayoff