2014-04-27 9 views
11

Ho un repository con due sottomoduli che voglio convertire in un singolo progetto. Molte risposte implicano script, e alcuni sembrano essere complicati.Git Unisci sottomodulo nell'albero genitore in modo pulito e preservando la cronologia dei commit

[submodule "site"] 
    path = wp-content/themes/site 
    url = https://[email protected]/ajf-/site.git 
    fetchRecurseSubmodules = true 
    ignore = all 
[submodule "wpsite"] 
    path = wp-content/themes/wpsite 
    url = https://[email protected]/ajf-/wpsite.git 
    fetchRecurseSubmodules = true 
    ignore = all 

Esiste un/modo documentato ufficialmente supportato per unire questi moduli nel repository genitore?

+0

Possibile duplicato del [non-modulo di un modulo git] (https://stackoverflow.com/questions/1759587/un-submodule-a-git-submodule) – Qw3ry

risposta

12

L'approccio migliore è quello di fare il sottostruttura che unisce.

Innanzitutto, rimuovere i sottomoduli e la configurazione correlata dal superprogetto; Modifica il tuo file .gitmodules per rimuovere i sottomoduli interessati, oppure elimina del tutto il file se intendi unire tutti i sottomoduli. Elimina anche le directory del sottomodulo.

Quindi, aggiungere i repository sottomodulo come telecomandi appropriate al tuo SuperProject:

git remote add site https://[email protected]/ajf-/site.git 
git remote add wpsite https://[email protected]/ajf-/wpsite.git 

Poi, prendere il telecomandi:

git fetch --all 

Ora, controllare i rami che si desidera innestare al tuo progetto principale da ogni sottoprogetto:

git checkout -b site-branch site/some_branch 
git checkout -b wpsite-branch wpsite/some_other_branch 

Ora sei pronto per unire t rami tubo come sottostrutture con il progetto principale:

git read-tree --prefix=site/ -u site-branch 
git read-tree --prefix=wpsite/ -u wpsite-branch 

E il gioco è fatto. Controlla il risultato con gitk --all.

Poiché si desidera convertire in un singolo progetto, non si aggiorneranno i sottoprogetti in modo indipendente, quindi non descriverò come funziona.

Si può leggere su questo nel chapter on subtree merging from Pro Git

+0

Ho riscontrato un problema con questo metodo, vedere http://stackoverflow.com/questions/23447457/git-read-tree-not-merging-commit-history –

+0

@AlainJacometForte: La domanda a cui ci si collega è 410 Gone. (404ing). Ti sei sbagliato? – Navarr

+0

@Navarr http://stackoverflow.com/questions/1759587/un-submodule-a-git-submodule forse? – kampta

Problemi correlati