,

GIT Submodules – Kiedy sprawdzą się w projekcie?

W karierze dewelopera może zdarzyć się sytuacja, w której będzie trzeba pracować nad projektem korzystającym z rozwiązań, które są ciągle rozwijane i wymagana jest ścisła kontrola wersji zarówno plików bazowych projektu oraz tych dodatkowych. Przykładowo, zespół A pracuje nad rozwojem pluginu udostępniającego konkretne rozwiązanie dla WooCommerce, a zespół B nad trzeba sklepami, które powinny z niego korzystać. Oba projekty są w fazie rozwoju, dlatego system kontroli ich wersji będzie odgrywał kluczową rolę. Jak w takim wypadku zarządzać rozwojem takich projektów?

Problem

Bardzo nieefektywnym byłoby ręczne zarządzanie takimi projektami poprzez odzwierciedlanie w infrastrukturze sklepów każdej zmiany zachodzącej w pluginie. Generuje to dużo dodatkowej pracy oraz potencjalnych problemów, szczególnie w trakcie intensywnego rozwoju obu projektów.

Pewnym rozwiązaniem jest wprowadzenie systemu automatycznych aktualizacji, ale do tego wymagana byłaby określona infrastruktura, której zwykle w fazie początkowego rozwoju jeszcze nie ma. Dodatkowo może to generować problem z wersjonowaniem – czasem ze względu na specyficzne problemy wymagany będzie downgrade pluginu do określonej działającej wersji.

Jeśli zespoły są małe, a zmiany w obu projektach nie są duże, taka opcja może się sprawdzić, ale niestety nie będzie to dobry wybór w przypadku bardziej skomplikowanych sytuacji. Z pomocą przychodzi narzędzie git submodules, które umożliwia obsługę repozytorium w innym repozytorium rozdzielając je między sobą. Commity wykonywane w głównym repozytorium są odseparowane repozytorium skonfigurowanego jako podmoduł.

Jak to działa?

Informacje o konfiguracji podmodułów przechowywane są w pliku .gitsubmodules, dlatego przy inicjalizacji środowiska musimy zadbać o poprawne prawa dostępu do wszystkich repozytoriów wspomnianych w tym pliku.

W momencie gdy wykonujemy commit w repozytorium bazowym, wysyłana jest również informacja o stanie repozytorium podmodułu, a dokładniej – hash commita, który był wybrany. Przykładowo posiadając /wp-content/plugins/woocommerce-plugin skonfigurowany jako podmoduł, repozytorium bazowe nie widzi plików i zmian w nich wewnątrz tego katalogu, a jedynie informacje o aktualnym commicie wybranym w podmodule. W momencie gdy zajdzie zmiana w podmodule i zmienimy aktualnie wybrany commit, taka informacja zostanie zauważona przez repozytorium bazowe i będzie możliwa do zatwierdzenia.

-Subproject commit 69cd54bdd44fe3deec8f20adbf3375732bec17a8
+Subproject commit 1746f83ded1bdd269db5029a3c79b785f5aacc57

Dzięki takiemu rozwiązaniu, zarządzanie zmianami i utrzymywanie ich stanu jest znacznie ułatwione. Mamy dokładną kontrolę nad tym, który commit z podmodułu powinien być wykorzystywany przez kod bazowy projektu, a wszelkie zmiany w infrastrukturze są natychmiastowo widoczne.

Podsumowanie

Narzędzie jest niezwykle przydatne w przypadku projektów o podobnej architekturze jak wyżej. Możliwości jest o wiele więcej, dlatego zalecanym jest zapoznanie się z oficjalną dokumentacją, która pozwala na dokładniejsze zrozumienie zasad działania aby maksymalnie wykorzystać je na swoja korzyść.

Dodaj komentarz

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

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Nasza pasja do technologii nie kończy się na dostarczaniu wnikliwych treści poprzez ten blog. Zapraszamy po więcej tajników specjalistycznej wiedzy dla entuzjastów takich jak Ty.

Tematy

animacje animate Attribute inheritance Block Theme Branża IT bug Code Comments CSS CSS Flexbox developer tools Doc Blocks dostępność www Edge Edge computing Editor Flex Gap FSE Full Site Editing GIT GIT Submodules Gutenberg HTTP HTTP/2 HTTP/3 IT JS Memcached Optimization plik SVG Praca praca w IT Rozmowy o WordPress strony www SVG Text-overflow theme.json v-model Vue.js wcag web accessibility Web development webkit line clamp Wordpress wp postmeta api wp transient