450 votes

Quand utiliseriez-vous les différentes stratégies de fusion git?

À partir de la page de man git-fusion, il y a un certain nombre de fusionner les stratégies que vous pouvez utiliser.

  • résoudre - Cela ne peut résoudre les deux têtes (c'est à dire la branche courante et une autre branche-vous tiré de) à l'aide de 3-way algorithme de fusion. Il essaie de soigneusement détecter criss-cross de fusion des ambiguïtés et est généralement considéré comme sûr et rapide.

  • récursif - Cela ne peut résoudre deux têtes à l'aide d'3-way algorithme de fusion. Quand il y a plus d'un ancêtre commun qui peut être utilisé pour le 3-way merge, il crée une fusion de l'arbre de l'ancêtre commun et l'utilise comme l'arbre de référence pour le 3-way merge. Cela a été rapportée à la suite en moins de conflits de fusion sans causer de mal fusionne par des tests effectués sur les fusion s'engage prises de noyau Linux 2.6 le développement de l'histoire. En outre, elle peut détecter et traiter des fusions impliquant renomme. C'est le défaut de fusion de la stratégie lors de l'extraction ou de la fusion d'une branche.

  • le poulpe - Cela résout plus de deux têtes de cas, mais refuse de le faire complexe de fusion qui a besoin de manuel de résolution. Il est principalement destiné à être utilisé pour le regroupement sujet chefs de direction ensemble. C'est le défaut de fusion de la stratégie lors de l'extraction ou de la fusion de plus d'une des branches.

  • nôtre - Cela résout n'importe quel nombre de têtes, mais le résultat de la fusion est toujours l'actuel chef de la direction générale. Il est destiné à être utilisé pour remplacer la vieille histoire du développement des branches latérales.

  • la sous-arborescence - C'est une modification de la stratégie récursive. Lors de la fusion d'arbres A et B, si B correspond à un sous-arbre de A, B est réglée pour correspondre à la structure de l'arbre de l'Un, au lieu de lire les arbres au même niveau. Ce réglage est également réalisé à l'ancêtre commun de l'arbre.

Quand dois-je spécifier quelque chose de différent que celui par défaut? Quels sont les scénarios les mieux?

321voto

Dustin Points 35205

Je ne suis pas familier avec les résoudre, mais j'ai utilisé les autres:

Récursive

Récursif est la valeur par défaut pour les non-rapide-vers l'avant les fusions. Nous sommes tous familiers avec celui-là.

Le poulpe

J'ai utilisé le poulpe quand j'ai eu plusieurs arbres qui devaient être fusionnées. Vous voyez ce dans les grands projets de, où de nombreuses branches ont eu un développement autonome et il est tout prêt à s'unir dans une seule tête.

Une pieuvre branche fusionne plusieurs têtes dans un commit tant qu'il peut le faire proprement.

Pour illustration, imaginez que vous avez un projet qui a un master, puis trois branches de fusion (appelons a, b et c).

Une série de récursive fusionne devrait ressembler à ceci (notez que la première fusion était une avance rapide, que je n'ai pas la force de la récursivité):

alt text

Toutefois, un poulpe de fusion devrait ressembler à ceci:

commit ae632e99ba0ccd0e9e06d09e8647659220d043b9
Merge: f51262e... c9ce629... aa0f25d...

alt text

Le nôtre

Le nôtre == j'ai envie de tirer dans une autre tête, mais jetez tous les changements que la tête présente.

Cela permet de maintenir l'histoire d'une branche sans aucun des effets de la branche.

(Lire: Il n'est même pas regardé les changements entre les branches. Les branches sont juste fusionné et rien n'est fait pour les fichiers. Si vous souhaitez fusionner dans l'autre branche et à chaque fois il y a la question "notre version du fichier ou de leur version", vous pouvez utiliser git -X ours)

La sous-arborescence

Sous-arbre est utile lorsque vous souhaitez fusionner dans un autre projet dans un sous-répertoire de votre projet en cours. Utile lorsque vous avez une bibliothèque que vous ne souhaitez pas inclure comme un sous-module.

51voto

Jakub Narębski Points 87537

En fait, la seule deux stratégies que vous voulez choisir sont les nôtres si vous voulez annuler les modifications apportées par branche, mais garder la direction générale de l'histoire et de la sous-arborescence si vous êtes à la fusion projet indépendant dans le sous-répertoire de superproject (comme 'git-gui" dans git repository).

poulpe de fusion est utilisé automatiquement lors de la fusion de plus de deux branches. résoudre est ici principalement pour des raisons historiques, et pour quand vous êtes touché par récursive de fusion de la stratégie coin des cas.

29voto

thaddeusmt Points 8012

"Résoudre" vs "Récursive" stratégie de fusion

Récursif est la valeur par défaut à deux chef de la stratégie, mais après quelques recherches j'ai enfin trouvé quelques infos sur le "résoudre" fusion de la stratégie.

Prises de O'Reilly livre de Contrôle de Version avec Git (Amazon) (paraphrasé):

À l'origine, de "résoudre" a été la stratégie par défaut pour Git fusionne.

En criss-cross de fusion des situations, où il n'y a plus d'une possible fusion de base, la détermination de la stratégie fonctionne comme ceci: choisissez-en un de la possible fusion de bases, et espérer pour le mieux. C'est vraiment pas aussi mauvais que cela puisse paraître. Il s'avère souvent que les utilisateurs ont travaillé sur les différentes parties du code. Dans ce cas, Git détecte que c'est de refusionner certains changements qui sont déjà en place et évite le double de changements, en évitant le conflit. Ou, si ceux-ci sont de légers changements qui ne sont à l'origine du conflit, à moins que le conflit devrait être facile pour le développeur de gérer..

J'ai réussi à fusionner les arbres à l'aide de "résoudre" qui a échoué avec la valeur par défaut récursive de la stratégie. J'ai été prise en fatal: git write-tree failed to write a tree d'erreurs, et grâce à ce blog (miroir) j'ai essayé le "-s résoudre", ce qui a fonctionné. Je ne suis toujours pas exactement pourquoi... mais je pense que c'était parce que j'avais en double des changements dans les arbres, et de résoudre les "sauté".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X