2013-01-09 11 views
46

Eventuali duplicati:
When would you use the different git merge strategies?Quali sono le strategie di fusione di Git?

Quando git unisce i file ci sto lavorando, vedo:

Merge made by the 'recursive' strategy 

Che cosa è esattamente la strategia ricorsiva? Quali altre strategie ci sono (se esistono)? E quale sarebbe il vantaggio di usarne uno sull'altro? Le strategie differenti hanno prestazioni diverse? Oppure due strategie diverse potrebbero portare a risultati di fusione diversi?

+6

una buona comunità wiki è stato avviato qui: http://stackoverflow.com/questions/366860/when-would-you-use-the-different-git-merge- strategie –

+3

Questa NON è una domanda duplicata. L'utente si chiede Quali sono gli algoritmi, che non è la stessa di quando li useresti. algoritmi sono spiegati in qualche modo più dettagliato a questi luoghi: RECURSIVE STRATEGIA: http://codicesoftware.blogspot.com/2011/09/merge-recursive-strategy.html SUBTREE unione: http: // git-scm .com/book/it/Git-Tools-Subtree-Merging @Chris Missal: nessun reato significava, ma il commento del wiki della comunità sopra contiene lo stesso link della casella "Possibile duplicato" sopra, con meno spiegazione, ed è quindi solo rumore. – SteveS

+2

Il mio commento è stato pubblicato prima che venisse contrassegnato come duplicato. Stavo solo cercando di aggiungere alcune informazioni correlate alla domanda. -_O –

risposta

16

Da git help merge:

The merge mechanism (git-merge and git-pull commands) allows the 
    backend merge strategies to be chosen with -s option. Some strategies 
    can also take their own options, which can be passed by giving 
    -X<option> arguments to git-merge and/or git-pull. 

    resolve 
     This can only resolve two heads (i.e. the current branch and 
     another branch you pulled from) using a 3-way merge algorithm. It 
     tries to carefully detect criss-cross merge ambiguities and is 
     considered generally safe and fast. 

    recursive 
     This can only resolve two heads using a 3-way merge algorithm. When 
     there is more than one common ancestor that can be used for 3-way 
     merge, it creates a merged tree of the common ancestors and uses 
     that as the reference tree for the 3-way merge. This has been 
     reported to result in fewer merge conflicts without causing 
     mis-merges by tests done on actual merge commits taken from Linux 
     2.6 kernel development history. Additionally this can detect and 
     handle merges involving renames. This is the default merge strategy 
     when pulling or merging one branch. 

     The recursive strategy can take the following options: 

     ours 
      This option forces conflicting hunks to be auto-resolved 
      cleanly by favoring our version. Changes from the other tree 
      that do not conflict with our side are reflected to the merge 
      result. 

      This should not be confused with the ours merge strategy, which 
      does not even look at what the other tree contains at all. It 
      discards everything the other tree did, declaring our history 
      contains all that happened in it. 

     theirs 
      This is opposite of ours. 

     subtree[=path] 
      This option is a more advanced form of subtree strategy, where 
      the strategy makes a guess on how two trees must be shifted to 
      match with each other when merging. Instead, the specified path 
      is prefixed (or stripped from the beginning) to make the shape 
      of two trees to match. 

    octopus 
     This resolves cases with more than two heads, but refuses to do a 
     complex merge that needs manual resolution. It is primarily meant 
     to be used for bundling topic branch heads together. This is the 
     default merge strategy when pulling or merging more than one 
     branch. 

    ours 
     This resolves any number of heads, but the resulting tree of the 
     merge is always that of the current branch head, effectively 
     ignoring all changes from all other branches. It is meant to be 
     used to supersede old development history of side branches. Note 
     that this is different from the -Xours option to the recursive 
     merge strategy. 

    subtree 
     This is a modified recursive strategy. When merging trees A and B, 
     if B corresponds to a subtree of A, B is first adjusted to match 
     the tree structure of A, instead of reading the trees at the same 
     level. This adjustment is also done to the common ancestor tree. 
+39

Questo non è ancora chiaro. Qualcuno può spiegarlo un po 'più chiaro? – reneruiz

+10

Le pagine man/output di aiuto sono grandi se si capisce il contesto e si desidera un aggiornamento. Se non conosci l'argomento, possono essere oscuri e inutili – Basic

+1

La migliore spiegazione che ho trovato è qui http://stackoverflow.com/a/366940/536434 – briankip

Problemi correlati