2009-12-14 11 views
57

Po przełączeniu gałęzi z kasą git, zakładam, że większość czasu chciałbyś zaktualizować swoje submoduły.Dlaczego aktualizacja modułu git nie jest automatyczna przy kasie git?

  • W jakiej sytuacji pan nie chcesz zaktualizować submodules po włączeniu?
  • Co by się zepsuło, gdyby zostało to zrobione automatycznie przez pobranie git?

Wzbogacona przykład:

  • gałęzi ma submodule S w 3852f1
  • odgałęzienie B ma modułem S w fd72d7

Na gałęzi git realizacji transakcji B spowoduje kopia robocza oddziału B z modułem podrzędnym S przy 3852f1 (ze zmodyfikowanym S). Aktualizacja modułu git spowoduje pobranie zamówienia S na fd72d7.

+2

pokrewne: http://stackoverflow.com/questions/4611512/is-there-a-way-to-make-git-pull-automatically-update-submodules – philfreo

+1

jestem zgodzić się z tobą. Pracuję nad projektem z submodułami i po każdym ciągnięciu powinienem wykonać aktualizację modułu git, ale nie jest to konieczne w większości przypadków. jedyny powód, aby to zrobić - nie przegap, kiedy jeden z submodułów jest rzeczywiście aktualizowany. –

Odpowiedz

19

Uważam, że submoduły nie aktualizujące się automatycznie są zgodne z celami rozwoju Git. Git jest przeznaczony do pracy w trybie rozproszonym i nie zakłada, że ​​jesteś w stanie połączyć się z repozytorium innym niż lokalne, chyba że wyraźnie mu to powiesz. Git, który nie będzie automatycznie odświeżał submodułu, byłby oczekiwanym zachowaniem, gdy pomyślałby o tym.

Po tym powiedzeniu, jeśli wiesz, że zawsze chcesz, aby te podmoduły były wciągane i wiesz, że nigdy nie oddzieliłeśby się od tych submodułów do innego lokalnego repozytorium, to nie powinno to niczego złamać, jeśli automatycznie odświeżone po kasie.

+37

Myślę, że Git Checkout powinien narzekać, jeśli zatwierdzenie dla modułu jest niedostępne, zamiast domyślnie pozostawić katalog roboczy w stanie niespójności. Następnie możesz wykonać aktualizację modułu git, aby pobrać referencję commit. Znowu normalnie zatwierdzenie będzie dostępne, a realizacja transakcji będzie możliwa bez dostępu do sieci. Zaakceptowanie twojej odpowiedzi, ponieważ brzmi to rozsądnie (ale ja jej nie lubię;) – serbaut

+1

Po drugie, myślę, że git powinien spróbować zrobić moduł częściowy i zaktualizować początkową kasę i złożyć skargę i pokazać status, jeśli istnieje moduł, który nie spełnia warunków. Zostały wyciągnięte lokalnie za pierwszym razem. Po tym, jak już raz pojawi się potrzeba aktualizacji jawnej, ma to sens, ponieważ repozyty są różne, a moduł częściowy odwołuje się do konkretnego zatwierdzenia. Ale nawet w rozproszonym świecie, w którym być może był on niedostępny, najprawdopodobniej zechcesz go w pewnym momencie, a git powinien dać ci znać, że nigdy nie został wyciągnięty. – cclark

+4

'git fetch' ma opcję automatycznego * pobierania podmodułów, więc podobnie myślę, że kasa powinna mieć podobną opcję do automatycznie aktualizowanych/kasowych submodułów. –

4

git checkout --recurse-submodules zostanie dodany do git 2,13

ten jest wymieniony w informacjach o wydaniu w: https://github.com/git/git/commit/e1104a5ee539408b81566066aaa6963cb87d5cd6#diff-c24776ff22455a30fbb78e378b7df0b0R139

Na this mailing list thread, dev Git Randall S. Becker mówi, że zamierza także dodać submodule.recurse config później, aby włączyć to domyślnie, co, jak myślę, prawdopodobnie zostanie połączone w pewnym momencie.

Następnie musimy po prostu poczekać, aż stanie się domyślną wersją git 3.0! :-)