Git Submodule
Ostatnia aktualizacja
Submoduł osadza jedno repozytorium Git wewnątrz drugiego, przypięte do konkretnego commita. Repozytorium nadrzędne zapisuje, od którego commita submodułu zależy, więc wszyscy dostają tę samą wersję. W ten sposób dołączasz wspólną bibliotekę albo komponent z osobnego repozytorium bez kopiowania jego kodu.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git submodule add <url> libs/x | Dodaje repozytorium jako submoduł w libs/x |
git clone --recurse-submodules <url> | Klonuje repozytorium razem z submodułami |
git submodule update --init --recursive | Inicjuje i pobiera submoduły po zwykłym klonowaniu |
git submodule update --remote | Aktualizuje submoduły do ich najnowszego commita |
git submodule status | Pokazuje commit każdego submodułu |
Typowe przypadki
| Cel | Polecenie |
|---|---|
| Sklonować projekt z submodułami | git clone --recurse-submodules <url> |
| Pobrać submoduły po wcześniejszym sklonowaniu | git submodule update --init --recursive |
| Podbić submoduł do najnowszej wersji | git submodule update --remote |
Najczęstsze pytania o git submodule
Czym jest submoduł w Git?
Submoduł to repozytorium Git zagnieżdżone w innym repozytorium Git na ustalonym commicie. Repozytorium nadrzędne przechowuje wskaźnik do tego konkretnego commita, a nie pliki submodułu, więc współpracownicy pobierają tę samą wersję. Używa się go do dołączania zależności albo wspólnego komponentu, który ma własne repozytorium i historię.
Jak sklonować repozytorium z submodułami?
Użyj
git clone --recurse-submodules <url>, żeby w jednym kroku sklonować repozytorium nadrzędne i wszystkie jego submoduły. Jeśli repozytorium jest już sklonowane bez tej flagi, uruchom potem git submodule update --init --recursive, żeby wypełnić foldery submodułów.Jak zaktualizować submoduł do najnowszego commita?
Uruchom
git submodule update --remote, które pobiera śledzoną gałąź każdego submodułu i przesuwa go na najnowszy commit. Potem zrób commit tej zmiany w repozytorium nadrzędnym, bo to ono zapisuje, na który commit submodułu wskazuje: aktualizacja nie jest zapisana, dopóki nie zatwierdzisz tego wskaźnika.Dlaczego folder submodułu jest pusty po sklonowaniu?
Bo klonowanie odbyło się bez
--recurse-submodules, więc Git utworzył foldery, ale nie pobrał ich zawartości. Naprawisz to przez git submodule update --init --recursive, które inicjuje i pobiera każdy submoduł.Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom
git submodule w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia konfigurację repozytorium.