2013-11-14 17 views
14

Próbuję użyć submodułów git do agregowania 10 + repozytoriów w jedną strukturę dla łatwego rozwoju.Git submodule do śledzenia zdalnego oddziału

Ma on klonować moduł i kasować oddział. Zamiast tego moduł jest sprawdzany w trybie głowicy odłączonej.

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 plików wydaje się być w porządku

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

Chcemy oddział MY_BRANCH być wyrejestrowany domyślnie zamiast oderwane głowy. Jak to osiągnąć?

+0

Tak działają podmodulki. Projekt główny odwołuje się do konkretnego zatwierdzenia, a nie oddziału. – twalberg

Odpowiedz

18

submodules są zawsze wyrejestrowany w detached HEAD mode.

Dzieje się tak dlatego, że moduł podrzędny wyewidencjonuje SHA1 przechowywany w special entry in the index of the parent repo.

Plus, jeśli chcesz modułem śledzić oddział został zarejestrowany w .gitmodules, trzeba:

git submodule update --init --remote 

--remote dokona git fetch plus kasa nowego HEAD.
Niestety, nawet ta realizacja będzie miała wartość zatwierdzenia, a nie oddziału (ponieważ domyślnie nie ma lokalnego modułu w module podległym), więc ... wróć do odłączonego trybu HEAD.
Zobacz więcej na "Git submodules: Specify a branch/tag".

Można spróbować (nie badane) a:

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

Biorę wykorzystać fakt git submodule foreach ma dostęp do „$path”, nazwa katalogu modułem względem superproject.


Było próbą określenia oddział dla modułem być automatycznie sprawdzane w (commit 23d25e4 dla Git 2.0) .... ale to dostałem odwrócone (commit d851ffb, 2d kwietnia 2014)!
Może wkrótce nadejdzie, ale nie w obecnej implementacji.

+0

Byłbym wdzięczny, gdybyś mógł odpowiedzieć na moje powiązane pytanie tutaj: http://stackoverflow.com/q/25799319/2872891. Dziękuję Ci! –

1

Jeśli Twój plan dotyczy wkładu, najlepszym rozwiązaniem jest sprawdzenie go oddzielnie jako regularnego repozytorium git. Pracujesz w oddziałach z różnymi pilotami. Następnie skieruj swój submoduł na pojedynczy pilot, którego chcesz użyć do testowania.