Est-il possible pour git merge
ignorer les différences de fin de ligne?
Peut-être que je pose la mauvaise question ... mais:
J'ai essayé uisng config.crlf input
mais les choses se sont un peu désordonnées et hors de contrôle, spécialement quand je l’ai appliquée après coup.
D'une part, appliquer cette configuration après le fait ne semble pas affecter les fichiers qui ont été validés dans le référentiel avant d'appliquer cette option. Une autre chose est que, soudainement, tous les commits génèrent de nombreux messages d’avertissement gênants sur la conversion de CRLF en LF.
Pour être honnête, peu importe la fin de ligne utilisée, je préfère personnellement le style Unix \n
, mais peu importe. Tout ce qui m'importe, c'est pour git merge
être un peu plus intelligent et ignorer les différences entre les fins de ligne.
Parfois, j'ai deux fichiers identiques, mais git les marque comme étant en conflit (et le conflit est le fichier entier) simplement parce qu'ils utilisent un caractère de fin de ligne différent.
J'ai découvert que git diff
accepte un --ignore-space-at-eol
option, serait-il possible de laisser git merge
utilisez-vous cette option également?
Je cherchais la même réponse et j'ai découvert this
Fusion de branches avec des attributs d’archivage/de sortie différents
Si vous avez ajouté des attributs à un fichier qui entraînent la modification du format de référentiel canonique de ce fichier, tels que l'ajout d'un filtre pur/smudge ou d'attributs text/eol/ident, la fusion de tout élément où l'attribut n'est pas en place entraînerait normalement des conflits de fusion. .
Pour éviter ces conflits de fusion inutiles, il est possible d'indiquer à git d'exécuter une extraction et une archivage virtuelles des trois étapes d'un fichier lors de la résolution d'une fusion à trois voies en définissant la variable de configuration merge.renormalize. Cela évite que les modifications provoquées par la conversion d'archivage ne provoquent de faux conflits de fusion lorsqu'un fichier converti est fusionné avec un fichier non converti.
Tant qu'un "smudge → clean" produit le même résultat qu'un "clean", même sur les fichiers déjà maculés, cette stratégie résoudra automatiquement tous les conflits liés au filtre. Les filtres qui n'agissent pas de cette manière peuvent entraîner des conflits de fusion supplémentaires qui doivent être résolus manuellement.
Donc exécuter cette commande dans n'importe quel référentiel fera l'affaire:
git config merge.renormalize true
Après avoir lu https://stackoverflow.com/a/12194759/1441706 et https://stackoverflow.com/a/14195253/1441706
pour moi, cette commande a parfaitement fait l'affaire:
git merge master -s recursive -X renormalize
Comme dans cette réponse: https://stackoverflow.com/a/5262473/943928
Tu pourrais essayer: git merge -s recursive -Xignore-space-at-eol
"git merge -Xrenormalize" fonctionne à merveille.
Ce que j’ai fait, c’est de tout laisser comme valeur par défaut (c’est-à-dire autocrlf = true), de toucher tous les fichiers (find. -Exec touch {} \;), de permettre à git de les voir comme 'modifiés' et de les renvoyer, puis le faire. Sinon, vous serez toujours en proie à des messages ennuyeux ou à des différences surprenantes, ou vous devrez désactiver toutes les fonctionnalités d'espaces blancs de git.
Vous perdrez des informations sur le blâme, mais il vaut mieux le faire plus tôt que tard :)
http://stahlforce.com/dev/index.php?tool=remcrlf
Je l'ai essayé, mais si après la dernière ligne de votre code vous n'aviez pas déjà CRLF, il ajoute lui-même un LF et le fichier a été modifié dans git. En dehors de cela, cela fonctionne.
Il ne semble pas que cela puisse être fait directement, mais cet article suggère un travail de contournement.
AFAICT, (je ne l'ai pas essayé) tu pourrais utiliser git diff
pour comparer la branche que vous souhaitez fusionner avec l'ancêtre commun, puis appliquez les résultats avec git apply
. Les deux commandes ont --ignore-whitespace
options pour ignorer les erreurs de fin de ligne et d’espace.
Malheureusement, si le correctif ne s’applique pas correctement, l’opération est annulée. Vous ne pouvez pas résoudre les conflits de fusion. Il y a un --reject
option pour laisser des mecs impossibles à synchroniser dans .rej
fichiers, ce qui aide, mais ce n’est pas la même chose que d’avoir les conflits de fusion affichés dans un fichier.
Il me semble maintenant que le meilleur moyen est de normaliser les fins de ligne sur les deux branches (et de valider) avant de les fusionner.
J'ai googlé "convertir crlf en lf" et trouvé ceci comme les premiers résultats:
http://stahlforce.com/dev/index.php?tool=remcrlf
Je l'ai téléchargé et utilisé, semble être un outil de Nice.
>sfk remcr . .py
Assurez-vous cependant de spécifier un répertoire et un type de fichier (par exemple, .py), sinon, vous pourriez essayer de modifier le contenu du fichier .git
répertoire!