2013-11-14 20 views
14

Sto cercando di utilizzare i sottomoduli git per aggregare più repository di 10+ in un'unica struttura per un facile sviluppo.Sottomodulo Git per tenere traccia del ramo remoto

Si suppone che cloni il modulo e controlli un ramo. Invece, il modulo viene estratto in modalità staccata.

git clone [email protected]:org/global-repository.git 
git submodule update —init 
cd config-framework 
git status 

$git status 
#HEAD detached at b932ab5 
nothing to commit, working directory clean 

gitmodules file sembra essere a posto

$cat .gitmodules 
[submodule "config-framework"] 
     path = config-framework 
     url = [email protected]:org/config-framework.git 
     branch = MY_BRANCH 

Vogliamo che il ramo MY_BRANCH da controllare per default, piuttosto che la testa staccata. Come lo otteniamo?

+0

In questo modo funzionano i sottomoduli. Il progetto principale fa riferimento a un commit specifico, non a un ramo. – twalberg

risposta

18

moduli sono sempre controllato in un detached HEAD mode.

Ciò è dovuto al fatto che un sottomodulo esegue il checkout dello SHA1 memorizzato nello special entry in the index of the parent repo.

Inoltre, se si desidera un modulo a seguire il ramo è stato registrato nel .gitmodules, è necessario:

git submodule update --init --remote 

Il --remote farà una git fetch, oltre a una cassa del nuovo HEAD.
Purtroppo, anche quella verifica sarà di un commit, non del ramo (dal momento che non si dispone di un ramo locale per impostazione predefinita in un sottomodulo), quindi ... torna a una modalità distaccata HEAD.
Altre informazioni su "Git submodules: Specify a branch/tag".

Si può provare (non testato) un:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)' 

I approfittare del fatto git submodule foreach ha accesso a '$path', il nome della directory modulo relativo al SuperProject.


ci fu un tentativo di specificare un ramo di un modulo per essere automaticamente controllato in (commit 23d25e4 per Git 2.0) .... ma ha ottenuto invertito (commit d851ffb aprile 2d 2014)!
Potrebbe venire presto, ma non nella sua attuale implementazione.

+0

Apprezzeremmo se potessi rispondere alla mia domanda correlata qui: http://stackoverflow.com/q/25799319/2872891. Grazie! –

1

Se il tuo piano è quello di contribuire a un sottomodulo, l'approccio migliore è di controllarlo separatamente come un normale repo git. Lavori in filiali con telecomandi diversi. Quindi indirizza il tuo submodule sul singolo telecomando che desideri utilizzare per il test.