2013-02-28 8 views
11

Il nostro processo per git è un'unione periodica fino al nostro ramo principale in modo che le modifiche possano essere unite alle nostre ultime funzioni. Dal momento che gli ultimi round di fusione da un ramo all'altro, ci imbattiamo in un problema in cui la soluzione non è chiara.Perché i commit non seguono l'errore merge-base?

Abbiamo un repository che contiene 19 sottomoduli al suo interno. Quando facciamo la fusione di tutti i sottomoduli, vediamo quello che crediamo sia l'output atteso che ci dice che i file sono modificati, conflitti, ecc. Quindi quando arriveremo all'unione del repository "root", tutto andrà a sud e vediamo alcuni del seguente output (modificato per indicare solo i problemi).

warning: Failed to merge submodule projects/foo1 (commits don't follow merge-base) 
warning: Failed to merge submodule projects/foo2 (commits don't follow merge-base) 
warning: Failed to merge submodule projects/foo3 (not fast-forward) 

Found a possible merge resolution for the submodule: 
931a61165f3b2079523a122477fa5f44c123406d: Comment of last merge 

If this is correct simply add it to the index for example by using: 

git update-index --cacheinfo 160000 931a61165f3b2079523a122477fa5f44c123406d "projects/foo3" 

which will accept this suggestion. 

Ora, siamo in grado di eseguire il comando di git update-index suggerito. Sarà felice per quel sottomodulo, ma non abbiamo mai dovuto farlo prima. Il problema è davvero pessimo quando si guardano i sottomoduli foo1 e foo2 in cui non viene visualizzato alcun aiuto.

+0

Per ogni modifica dei sottomoduli, hai anche commesso e spinto il repository padre? – VonC

+0

Prima della fusione, entrambi gli alberi sono completamente funzionanti senza alcun problema di mancato commit in alcun sottomodulo. È questo che vuoi dire? – Peter

+0

Intendo dire che, quando si modifica un sottomodulo, è necessario eseguire il commit e il push, quindi passare al genitore, al commit e al push (poiché lo SHA1 del sottomodulo è stato modificato). Mi stavo chiedendo se hai apportato qualche modifica a quei sottomoduli (e se sì, se hai seguito la sequenza commit-push), prima di tentare di unire il repository padre. – VonC

risposta

0

Nel commentare il caso di OP sotto la sua domanda scompare:

Per coloro che la navigazione a questo post, mentre io non ero sicuro al 100% quello che è successo, credo che sia stato a causa di un utente che ha sottratto manualmente il GIT_MERGE file dal proprio repository root e inviati. Con la fusione manualmente ogni modulo, spingendo le modifiche e poi nel modulo principale in esecuzione

git commit -i -m "blah" . 

fatto ci sembra di risolvere il problema. Git non ha mai affermato che avevamo bisogno di eseguire il commit nel sottomodulo root ma sembra che ce ne fosse bisogno. Le fusioni successive sembrano funzionare correttamente.