Ma récente fusion de Git a engendré un grand nombre de conflits. Mon approche actuelle consiste à rechercher la prochaine occurrence de «<<<», puis à effectuer la fusion par édition de texte standard.
Question : Existe -t-il un moyen pour Emacs de prendre en charge la fusion en utilisant les informations disponibles dans Git concernant ma version, leur version et la version de base du fichier?
Éditer: Cette question a une portée différente de celle de cette question , car elle ne se limite pas à invoquer ediff.
e
sur les fichiers en conflit. Magit se lanceraediff
pour effectuer la fusion et vous invitera par la suite à confirmer vos modifications, puis vous pourrez organiser le fichier fusionné.smerge
etvc-resolve-conflict
une autreediff
) et dure depuis plus longtemps. Je conviens que le premier fil pourrait utiliser un meilleur titre, cependant.Réponses:
Vous voudrez peut-être essayer
smerge-mode
simplement d'ouvrir le fichier en conflit et de le faire M-xsmerge-mode
RET. Il mettra en évidence toutes les régions en conflit. Il ajoute également des raccourcis clavier pour résoudre facilement les conflits, consultez sa documentation C-hfsmerge-mode
RETpour les connaître.Préfixe par défaut
Je trouve le préfixe par défaut pour
smerge-mode
C-c^fastidieux, donc je l'ai changé pour C-cvLiens importants
Pour moi, les reliures les plus importantes sont:
smerge-next
lié à smerge-command-prefixnpasser au conflit suivant.smerge-previous
lié à smerge-command-prefixppasser au conflit précédent.smerge-keep-current
lié à smerge-command-prefixRETconserver la version sur laquelle se trouve le curseur.smerge-keep-mine
obligé de smerge-command-prefixmgarder vos changements.smerge-keep-other
lié à smerge-command-prefixogarder d'autres changements.smerge-ediff
obligé de smerge-command-prefixEdémarrer une session ediff pour fusionner les conflits. C'est la même chose quevc-resolve-conflicts
(merci @phils et @Malabarba pour l'avoir signalé).Activation automatique du mode smerge
MISE À JOUR: Les éléments suivants ne concernent que les versions Emacs antérieures . Ils
25.1
peuvent entraîner des problèmes pour les versions ultérieures, voir https://github.com/magit/magit/issues/3897.De plus, vous pouvez être intéressé par l'activation automatique
smerge-mode
lors de la visite d'un fichier / tampon avec des marqueurs de conflit, vous pouvez utiliser quelque chose comme ce qui suit pour y parvenirNotez que j'utilise
buffer-list-update-hook
et pasfind-file-hook
depuis la plupart du temps j'obtiens des conflits dans un tampon qui est déjà ouvert dans emacs, auquel cas cefind-file-hook
n'est d'aucune aide.Vérifiez également les autres méthodes mentionnées dans cette réponse.
la source
smerge-ediff
. (2) Quelle est la version d'Emacs? Sur la branche emacs master actuelle, smerge s’active automatiquement. (3) Pourquoi utilisez-vousbuffer-list-update-hook
au lieu defind-file-hook
?smerge-ediff
etvc-resolve-conflicts
sont la même chose.smerge-mode
les liaisons de clé sont documentées dans sa documentation. Je peux peut-être citer le manuel ici pour l'exhaustivité. Merci pour les commentaires. 2) Je suis sur la v24.5, bien que j'essaie parfois de master branch, je ne me souviens pas que smerge soit automatiquement activé (s'agit-il d'un changement récent?). 3) C'est parce que la plupart du temps, j'ai des conflits dans des mémoires tampons déjà ouvertes, auquel cas je devrais activer explicitementsmerge-mode
smerge-mode
activé tout le temps? Peut-être que ça ne fait pas grand chose avant d'être invoquéEdit: cette réponse ayant reçu plus de votes positifs que prévu, je l’ai développée un peu.
Pour compléter la réponse par @IqbalAnsari, vous pouvez également utiliser
vc-resolve-conflicts
(comme mentionné par d'autres, il s'agit d'un aliassmerge-ediff
). Cela va démarrer l'ediff
interface. À gauche, le premier parent fusionné et le second parent fusionné à droite. Ils sont étiquetés sur le modeline avecMINE
etOTHER
respectivement. Le tampon fusionné est présenté ci-dessous (voir capture d'écran).Raccourcis clavier
Vous pouvez également accéder à la mémoire tampon fusionnée avec
other-window
et modifier manuellement si la résolution d'un conflit est plus compliquée que d'accepter une version. Lorsque vous avez terminé, vous pouvez enregistrer le tampon et quitter Emacs comme d'habitude. Pour plus d’aide, utilisez-le simplement ?pendant laediff
session, il contient toute une série de commandes très utiles. Je ne sais toujours pas ce que font la moitié d'entre eux!la source
C-x v <
, bien que dans la pratique je suis plus susceptible de l'invoquer avec Magit (selon le commentaire de wvxvw).vc-resolve-conflict
c'est un alias poursmerge-ediff
qui, comme son nom l'indique, démarre une session Ediff, pas une session Emerge. Soit dit en passant, l’en-tête de la bibliothèqueediff.el
reconnaît l’emerge.el
influence de s, puis poursuit en disant "La version actuelle d’Ediff remplace Emerge. Elle fournit une interface utilisateur supérieure et possède de nombreuses fonctionnalités principales qui n’existaient pas dans Emerge. En particulier, elle permet de corriger Comparaison de fichiers à 2 et 3 voies, fusion et opérations de répertoire. "magit-ediff-resolve
(Em
oue
sur un fichier avec des conflits) utilise ensmerge-ediff
interne. Toutefois, il estediff-quit-hook
préférable de ne pas fournir une expérience de finition de session légèrement meilleure. Au lieu de vous dire que vous pouvez enregistrer "le tampon" (il existe plusieurs tampons), il vous demande si vous souhaitez enregistrer le tampon (tout en vous indiquant son nom).Si vous utilisez Spacemacs, je vous recommanderais d'activer le "smerge-transitient-mode", qui ouvre un menu hydra avec toutes les commandes smerge possibles.
Pour ce faire, appelez simplement Mx
spacemacs/smerge-transient-state/body
, qui est attribué par défaut àSPC-g-r
.Voici une capture d'écran:
La modification de votre fichier devrait alors être intuitive:
n
pour aller au prochain morceau.la source