Fusion sans conflits d'espaces

185

J'ai un problème où j'ai un gros commit qui change environ mille lignes de code, en supprimant les espaces à la fin des lignes et en supprimant les espaces avant les tabulations.

Il y a également environ 50 pull requests pour ce projet, qui auront toutes des conflits lorsque mon commit sera fusionné. Existe-t-il un moyen de configurer git de sorte que lors de la fusion de futurs commits, il ignore les conflits où l'un d'entre eux n'est qu'un changement d'espace?

Modifier git lui-même ou utiliser un outil tiers n'est pas possible, mais utiliser un hook est très bien.

callumacrae
la source
Possible duplication de git whitespace woes
Cees Timmerman

Réponses:

255
 git merge -Xignore-all-space

Ou (plus précis)

 git merge -Xignore-space-change

devrait être suffisant pour ignorer tous les conflits liés à l'espace lors de la fusion.

Voir git diff :

--ignore-space-change

Ignorez les changements de quantité d'espaces blancs.
Cela ignore les espaces à la fin de la ligne et considère que toutes les autres séquences d'un ou plusieurs caractères d'espacement sont équivalentes.

--ignore-all-space

Ignorez les espaces lors de la comparaison des lignes.
Cela ignore les différences même si une ligne a des espaces alors que l'autre ligne n'en a pas.

ks1322 ajoute dans les commentaires un bon conseil:

Cela vaut la peine de fusionner --no-commitet de revoir la fusion avant la validation réelle .


L' OP Callum Macrae signale que, dans ce cas, la fusion se déroule sans interruption et les espaces de fin contenus dans les correctifs de demande d'extraction sont appliqués aux fichiers locaux.
Cependant, l'OP utilise un hook pré-commit qui s'occupe desdits espaces de fin.
(Je suppose un peu similaire à celui-ci , également référencé ici ).


Le hook de pré-validation de l'OP est référencé ici :

En plus de supprimer les espaces blancs de fin, il supprime un à trois espaces avant les tabulations (j'ai une largeur de tabulation définie sur 4) et ajoute des EOL.
J'ai eu des rapports selon lesquels le code qui ajoute l'EOL supprime le fichier dans Windows, mais je n'ai pas été en mesure de le répliquer.

VonC
la source
1
D'après mes tests jusqu'à présent, il semble que cela supprime toutes les modifications d'espace blanc dans le fichier. Cependant, j'utilise maintenant le hook pre-commit pour supprimer les espaces blancs de fin, donc ce n'est pas un problème.
callumacrae
1
@CallumMacrae: ok, et merci pour les commentaires. Encore une fois, j'ai ajouté votre lien dans la réponse pour plus de visibilité.
VonC
1
git merge -Xignore-space-change- eh bien, je peux dire avec certitude ce ne fonctionne pas ... . Le seul espace blanc que j'essayais de supprimer est resté. Git est vraiment nul.
jww
1
Cela vaut la peine de fusionner --no-commitet de revoir la fusion avant la validation réelle.
ks1322
1
-Xignore-all-space semble ne rien faire sur les espaces et --ignore-space-change n'a pas été reconnu comme une option par git
Preza8
0

Si vous voyez que vous avez beaucoup de problèmes d'espaces dans une fusion, vous pouvez simplement l'annuler et recommencer, cette fois avec -Xignore-all-space ou -Xignore-space-change. La première option ignore complètement les espaces lors de la comparaison des lignes, la seconde traite les séquences d'un ou plusieurs espaces blancs comme équivalentes.

Vaibhav
la source