2011-01-15 6 views
7

Jestem nowy na gil submoduły i zauważam, że zawsze odnoszą się do konkretnych zatwierdzeń.Git submoduły na mistrza

Czy istnieje jakikolwiek sposób, aby submoduły superprojektowe zawsze odnosiły się do głowy głównej gałęzi, więc "git submodule update" lub "git pull" w superprojektie po prostu robi "git pull" na wszystkich submodułach.

Dzięki.

+0

http://gitref.org/ strona Git Reference to dobry sposób na rozpoczęcie, jeśli nie masz doświadczenia w git. –

+1

@Saher: To jest bardzo szczegółowe pytanie, a nie tylko ogólne "Jestem nowy, by oderwać". – Cascabel

+0

Myślę, że odpowiedź brzmi nie. Git przechowuje nazwę zatwierdzenia, gdy zapisuje informacje o module częściowym, aw moim przypadku napisałem zestaw skryptów do wyciągania, dodawania, zatwierdzania i wypychania, który robi dokładnie to, co chcę zrobić z submodułami. – sinelaw

Odpowiedz

11

Krótka odpowiedź brzmi: nie. Chodzi o to, że wiesz na pewno, że konkretne zatwierdzenie modułu częściowego będzie działało z twoim projektem i nie chcesz, aby jakieś niezdefiniowane lub nieoczekiwane zachowanie przychodziło, wykonując aktualizacje w locie. Moduł podrzędny jest bezpośrednio reprezentowany przez dwie rzeczy: wpis w. Gitmodules i link gitlink, który jest odniesieniem do SHA1 pożądanego zatwierdzenia modułu podległego. SHA1, nie zmieniaj nazwy.

To, o co prosisz, to naprawdę superprojekt, który ma nie ma pojęcia, co znajduje się w module. Pomyśl o tym: różne klony twojego projektu mogły zaktualizować moduł w różnym czasie, a skończyłyby się jego różnymi wersjami, a następnie, gdyby w projekcie zostały dokonane zatwierdzenia, musiałyby one rejestrować różne zatwierdzenia w module częściowym. Kiedy się połączysz, będziesz musiał po prostu zignorować to, co mówią, i pociągnąć ponownie. Rezultat jest taki, że twoją prośbą jest unikanie całej idei submodułów: wiedzieć, co masz. Jeśli powiesz, że używasz "mistrza", wrócisz za dwa miesiące i nie będziesz miał pojęcia, co to znaczy!

Jeśli chcesz zawsze uzyskać aktualną gałąź główną, lepiej zrób to sam. Napisz skrypt, aby pobrać wszystkie submoduły i uruchamiaj je od czasu do czasu, zatwierdzając zaktualizowane wersje. (Najpierw przetestuj!) Chodzi o to, że z submodułami, dla każdego zatwierdzenia superprojektowego, musisz dokładnie wiedzieć, jakiej wersji podprojektu używasz. To twój wybór, jak często chcesz aktualizować wersję modułu częściowego; może być codziennie, jeśli chcesz.

Alternatywą byłoby dodanie katalogu (-ów) do (-ich) modułu (-ów) do twojego gitignore i napisanie krótkiego skryptu, aby je zaktualizować (i prawdopodobnie również je sklonować). Kosztowałoby to dla ciebie znajomość wersji, którą miałeś w przeszłości.

+0

Aptly, jak zawsze. +1 – VonC

+0

Bardzo jasne - czas na zdobycie umiejętności pisania skryptów .. – Sam

+1

@Jefromi: Może mógłbyś zaktualizować swoją odpowiedź, ponieważ teraz jest to możliwe w git? Zobacz odpowiedź VonC. – Onur

10

Aktualizacja 2013, ponieważ git 1.8.2, to moduł podrzędny może obserwować oddział (i nie tylko odwoływać stałą popełnić)

See "git submodule tracking latest".


(odpowiedź Original stycznia 2011 roku)

To jeden z differences between git submodules and (for instance) svn:externals.

Moduł submodułu ma być zbiorem plików o innym cyklu życia, z którego wybiera się określone zatwierdzenie, aby pracować nad własnym projektem (repozytorium nadrzędne).
Jeśli ten submoduł publikuje nowe zatwierdzenie, nie powinno być konieczne przerywanie wszystkiego, ponieważ nagle projekt nie jest już kompilowany z powodu najnowszych zmian tego modułu.

Jeśli, z drugiej strony, dwa zbiory plików są tak blisko powiązane, że modyfikowanie czegokolwiek w jednym oznacza aktualizację drugiego, to naprawdę powinny one być częścią * jednego repozytorium.