Śledzenie podmodułów git najnowsze

136

Przenosimy nasz (ogromny) projekt do gita i myślimy o zastosowaniu modułów podrzędnych. Nasz plan to mieć trzy różne głowy w superprojekcie: wydanie, stabilne, najnowsze. Liderzy projektu zajmą się wydaniem i stabilnymi gałęziami. W razie potrzeby przeniosą podmoduły.

Problemem jest „najnowsza” głowa. Chcielibyśmy, aby głowa superprojektu „najnowsza” śledziła główne gałęzie wszystkich podmodułów (automatycznie). Byłoby również wspaniale, gdyby pokazywał historię wszystkich zatwierdzeń do podmodułu.

Patrzyłem na gitslave, ale nie do końca tego chcemy. Jakieś sugestie?

l.thee.a
źródło
Podczas gdy prosiłeś o narzędzie, chcę tylko połączyć to pytanie, które zbiera jednolinijkowe robiące to samo: stackoverflow.com/questions/1030169/ ...
Tobu
Git oferuje teraz śledzenie najnowszych za pomocą modułów podrzędnych: zobacz moją edytowaną odpowiedź.
VonC

Odpowiedzi:

235

Aktualizacja marzec 2013

Git 1.8.2 dodał możliwość śledzenia gałęzi.

" git submodule" zaczął uczyć się nowego trybu integracji z końcówką zdalnej gałęzi (w przeciwieństwie do integracji z zatwierdzeniem zapisanym w gitlinku superprojektu).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Jeśli masz już obecny moduł podrzędny , a teraz chciałbyś śledzić gałąź, zobacz „ jak sprawić, by istniejący moduł podrzędny śledził gałąź ”.

Zobacz także samouczek Vogelli dotyczący modułów podrzędnych, aby uzyskać ogólne informacje o modułach podrzędnych .

Uwaga:

git submodule add -b . [URL to Git repo];
                    ^^^

Zobacz git submodulestronę podręcznika :

Specjalna wartość .jest używana do wskazania, że nazwa gałęzi w module podrzędnym powinna być taka sama, jak nazwa bieżącej gałęzi w bieżącym repozytorium .


Zobacz commit b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: Jeśli --branchpodano, zapisz to.gitmodules

Umożliwia to łatwe zapisanie submodule.<name>.branchopcji .gitmodulespodczas dodawania nowego modułu podrzędnego. Dzięki tej poprawce

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

zmniejsza się do

$ git submodule add -b <branch> <repository> [<path>]

Oznacza to, że przyszłe połączenia do

$ git submodule update --remote ...

otrzyma aktualizacje z tej samej gałęzi, której użyłeś do zainicjowania modułu podrzędnego, co zwykle jest tym, czego chcesz.

Podpisał: W. Trevor King


Oryginalna odpowiedź (luty 2012):

Podmoduł to pojedyncze zatwierdzenie, do którego odwołuje się repozytorium nadrzędne.
Ponieważ samo w sobie jest repozytorium Git, „historia wszystkich zatwierdzeń” jest dostępna za pośrednictwem modułu git logpodrzędnego.

Aby rodzic mógł automatycznie śledzić najnowsze zatwierdzenie danej gałęzi podmodułu, musiałby:

  • cd w module podrzędnym
  • git fetch / pull, aby upewnić się, że ma najnowsze zatwierdzenia we właściwej gałęzi
  • cd z powrotem w repozytorium nadrzędnym
  • dodaj i zatwierdź, aby zarejestrować nowe zatwierdzenie podmodułu.

gitslave (na który już spojrzałeś) wydaje się być najlepszym rozwiązaniem, w tym dla operacji commit .

Trochę irytujące jest wprowadzanie zmian w module podrzędnym ze względu na konieczność wyewidencjonowania odpowiedniej gałęzi podmodułu, wprowadzenia zmiany, zatwierdzenia, a następnie przejścia do superprojektu i zatwierdzenia zatwierdzenia (lub przynajmniej zapisania nowej lokalizacji podmoduł).

Inne alternatywy są szczegółowo opisane tutaj .

VonC
źródło
1
@BraveNewMath trzeba kasy właściwego oddziału w swoim modułem, a następnie przejdź do repo nadrzędnej i wpisz: git config -f .gitmodules submodule.<path>.branch <branch>. Dodaj wszystko, zatwierdzaj i pchaj.
VonC,
2
@BraveNewMath Szczegółowo opisuję wszystkie kroki, aby podmoduł śledził gałąź na stackoverflow.com/a/18799234/6309 .
VonC,
1
Ważne jest, aby użyć --remotetagu, jeśli nie chcesz mieć odłączonych głów podczas aktualizacji, zastanawiając się, dlaczego wydaje się, że twój świeżo pobrany kod jest za masterem!
Chris Watts,
3
@DC_ Zgadzam się z „tą odpowiedzią” (od kiedy ją napisałem). Funkcja „śledzenie gałęzi” ma na celu aktualizację podmodułu do najnowszego zatwierdzenia gałęzi. Gdy to zrobisz, nadal będziesz musiał dodać i zatwierdzić nowy stan podmodułu w repozytorium nadrzędnym. Następny klon sprawdzi ten stan (bezgłowy).
VonC,
3
@VonC Aby dokładniej wyjaśnić, funkcja „podążania za gałęzią” wpływa tylko na zachowanie git submodule update polecenia, informując go, do którego zatwierdzenia (tj. Ostatniego zatwierdzenia na urządzeniu głównym) ma zaktualizować moduł podrzędny, a nie automagicznie powoduje, że repozytorium nadrzędne aktualizuje, do którego na zatwierdzenie wskazuje podmoduł w czasie klonowania?
christner