Czym są submoduły Git i jak ich używać?

Czym są submoduły Git i jak ich używać?

Submoduły Git to sposób na włączenie jednego repozytorium Git jako podkatalog innego repozytorium. Ten rodzaj zagnieżdżania kodu źródłowego może być bardzo przydatny w przypadku projektów, które wymagają dokładniejszej kontroli nad swoimi zależnościami i procesem kompilacji, a także jest łatwy do skonfigurowania.

Dlaczego warto korzystać z modułów podrzędnych?

Kiedy dodajesz submoduł do repozytorium Git, zasadniczo tworzysz łącze między dwoma repozytoriami. Repozytorium główne i repozytorium submodułów mogą być aktualizowane niezależnie od siebie. Repozytorium nadrzędne będzie zawierać zdalny adres URL, a także odniesienie do wyewidencjonowanego identyfikatora zatwierdzenia w historii submodułu. Kiedy sklonujesz repozytorium nadrzędne, sklonuje ono również podmoduły.

Może to być przydatne, jeśli masz projekt, który jest zależny od kodu z innego projektu i chcesz zachować dwa projekty (i ich historie wersji) osobno, ale nadal mieć możliwość łatwej pracy z obydwoma.

Podstawową alternatywą dla podmodułów jest użycie menedżerów pakietów, takich jak NPM, NuGet lub Maven. Menedżery pakietów zapewniają scentralizowane repozytorium pakietów i bibliotek, które można łatwo instalować i aktualizować. Musisz jednak opublikować określoną wersję każdego pakietu, który chcesz wykorzystać. A jeśli twój kod jest prywatny, musisz użyć własnego prywatnego rejestru pakietów.

Submoduły Git umożliwiają dokładniejsze zarządzanie zależnościami niż większość menedżerów pakietów. Dzięki submodułom możesz dokładnie wybrać, które wersje każdej zależności chcesz uwzględnić w swoim projekcie, a łatwiej jest zaktualizować identyfikator zatwierdzenia submodułu niż opublikować nowy pakiet.

Submoduły ułatwiają również utrzymanie i używanie rozwidleń wspólnych bibliotek, na co wiele firm decyduje się, gdy konieczne są dodatkowe funkcje lub dostosowanie. Ostatecznie, jeśli utrzymujesz repozytorium dla modułu i potrzebujesz precyzyjnej kontroli nad swoimi zależnościami, możesz rozważyć użycie submodułów zamiast menedżerów pakietów.

Jak korzystać z podmodułów Git

Jeśli klonujesz repozytorium, które już korzysta z submodułów, większość pracy została już wykonana za Ciebie. Twój klient git powinien automatycznie sklonować i pobrać repozytorium submodułów oraz powinien aktualizować się za każdym razem, gdy inni opiekunowie wprowadzają zmiany do submodułu.

Jeśli nie, może być konieczne uruchomienie git clonez --recursiveflagą, która przeskanuje i zaktualizuje wszystkie moduły podrzędne.

git clone --recurse-submodules URL

Dodanie nowego modułu podrzędnego jest dość proste. Jeśli dodajesz zupełnie nowy submoduł z repozytorium źródłowego, wystarczy uruchomić git submodule add:

git submodule add URL submodule_directory

Spowoduje to pobranie repozytorium modułu podrzędnego z adresu URL i sklonowanie go do submodule_directoryfolderu.

Jeśli jednak chcesz przekonwertować istniejący folder, proces jest nieco bardziej skomplikowany. Możesz przeczytać nasz przewodnik dotyczący konwertowania katalogu na moduł podrzędny tutaj , ale proces ten obejmuje ponowne sklonowanie głównego repozytorium, filtrowanie historii zatwierdzeń, aby zawierała tylko katalog modułów, a następnie przekazanie modułu podrzędnego do nowego repozytorium.

Po dodaniu modułu podrzędnego konieczne będzie zatwierdzenie zmian w repozytorium nadrzędnym. Spowoduje to zaktualizowanie konfiguracji wszystkich innych osób pobierających repozytorium nadrzędne.

git commit -m "Added submodule submodule_directory"

Aktualizowanie podmodułów Git

Jeśli ktoś inny zaktualizował submoduł lub musisz pobrać aktualizacje z repozytorium submodułu, będziesz chciał użyć git submodule update:

git submodule update --remote

Jeśli jednak musisz samodzielnie wprowadzić zmiany, staje się to trochę trudniejsze. Dokonywanie zmian w kodzie w submodułach Git wymaga nieco większej ostrożności w porównaniu do aktualizacji kodu w zwykłym repozytorium Git, a generalnie masz dwie opcje:

  • Wprowadź zmiany w oddzielnym repozytorium dla modułu podrzędnego, a następnie zatwierdź je i zaktualizuj w normalny sposób. Będziesz musiał uruchomić git submodule updaterepozytorium nadrzędne, aby pobrać nowe zmiany.
  • Wprowadź zmiany w repozytorium nadrzędnym. Ponieważ moduł podrzędny jest w zasadzie osadzonym repozytorium Git, możesz wejść cddo katalogu podmodułu i normalnie uruchamiać polecenia Git. Jest to jedna z głównych zalet submodułów, ponieważ możesz utrzymywać oddzielne repozytoria, pracując jednocześnie nad obydwoma.

Jeśli dokonujesz zmian w repozytorium nadrzędnym, musisz przejść cddo modułu podrzędnego i zaktualizować:

cd submodule_dir

git commit -am "submodule commit"


git push

Następnie wróć do repozytorium nadrzędnego i prześlij aktualizacje do modułu podrzędnego do repozytorium rodzica:

cd. .

git commit -am "updated submodule"


git push

Powinieneś zobaczyć zmiany zarówno w repozytorium Github submodułu, jak i w repozytorium nadrzędnym.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *