web-dev-qa-db-fra.com

Ignorer * tous * les changements d'espaces avec git-diff entre commits

Je passe en revue une base de code, corrige des bizarreries d'espaces et corrige généralement l'indentation, etc., et je veux m'assurer que je n'ai pas apporté d'autres modifications par inadvertance. Je fais donc git diff -w Pour afficher les différences de tous les fichiers modifiés tout en ignorant les différences d'espaces. Le problème est que ce n’est pas réellement ignorer toutes les différences d’espace, du moins ce que [~ # ~] i [ ~ # ~] considère qu'il s'agit simplement de différences d'espaces. Par exemple, dans la sortie suivante de git diff -w,

-"Links":
-{
-
-    "Thermal":
-
-{
-
+  "Links": {
+    "Thermal": {

vous pouvez voir que j'ai seulement

  1. suppression des lignes vierges superflues,
  2. mettre des accolades au bout de la ligne de la clé dont elles ouvrent la valeur, et
  3. en retrait pour s'adapter au contexte

Cette question semblait offrir une réponse au début, mais elle traite des différences entre deux fichiers spécifiques et non entre deux spécifique commet . Tout le reste trouvé en cherchant était également une impasse. Par exemple, cette question concerne la fusion, ne pas afficher les différences, et cette question traite de l'affichage des différences au niveau du mot, etc.

60
iconoclast

Peut-être y a-t-il une meilleure réponse, mais la meilleure solution que j'ai trouvée jusqu'à présent est la suivante.

Tout d'abord, vous devez contrôler la définition de "l'espace" utilisée par Git. Créez ou éditez le .gitconfig dans votre projet, à inclure

[core]
    whitespace = -trailing-space,-indent-with-non-tab,-tab-in-indent

Ensuite, vous devez contrôler la définition d'un mot utilisé. Au lieu d'utiliser simplement git diff -w, ajouter --Word-diff-regex=[^[:space:]]:

git diff -w  --Word-diff-regex=[^[:space:]]

Vous verrez toujours le contexte, qui (dans mon cas, puisque j'essaie de faire en sorte qu'il n'y ait pas de différences sauf différences d'espaces)) n'est pas utile. Vous pouvez utiliser -U0 dire à Git de vous donner 0 lignes de contexte, comme si,

git diff -w -U0 --Word-diff-regex=[^[:space:]]

mais vous obtiendrez toujours une sortie qui ressemble assez au contexte, mais c'est toujours bien mieux que de parcourir toutes les modifications avec soin et manuellement pour vous assurer qu'il ne s'agit que de modifications d'espaces.

49
iconoclast

Ignore tous les espaces changent avec git-diff entre commits

Cette question semblait pouvoir offrir une réponse au début, mais elle traite des différences entre deux fichiers spécifiques et non entre deux commits spécifiques. Tout le reste trouvé en cherchant était aussi une impasse ....

Je pense que vous rencontrez des problèmes parce que Git est le mauvais outil pour ce travail. Cela ne facilite pas la tâche, et céder pour adapter l’outil est une mauvaise approche. Les outils sont supposés fonctionner pour vous et non et vice versa .

Effectuez un deuxième clone, puis vérifiez la révision de départ en question. Ensuite, lancez un diff régulier sur eux en utilisant votre révision actuelle: diff -bur --ignore-all-space <dir1> <dir2>.

Voici certaines des options pour diff

-i, --ignore-case
       ignore case differences in file contents

-E, --ignore-tab-expansion
       ignore changes due to tab expansion

-Z, --ignore-trailing-space
        ignore white space at line end

-b, --ignore-space-change
       ignore changes in the amount of white space

-w, --ignore-all-space
       ignore all white space

-B, --ignore-blank-lines
       ignore changes where lines are all blank
29
jww