{"id":258,"date":"2021-12-14T10:11:36","date_gmt":"2021-12-14T10:11:36","guid":{"rendered":"https:\/\/webdevs.blog\/pl\/?p=258"},"modified":"2026-02-20T07:28:18","modified_gmt":"2026-02-20T07:28:18","slug":"git-submodules-kiedy-sprawdza-sie-w-projekcie","status":"publish","type":"post","link":"https:\/\/webdevs.blog\/pl\/git-submodules-kiedy-sprawdza-sie-w-projekcie\/","title":{"rendered":"GIT Submodules &#8211; Kiedy sprawdz\u0105 si\u0119\u00a0w projekcie?"},"content":{"rendered":"<figure class=\"wp-block-post-featured-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1366\" height=\"768\" src=\"https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" style=\"object-fit:cover;\" srcset=\"https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git.jpg 1366w, https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git-300x169.jpg 300w, https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git-1024x576.jpg 1024w, https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git-768x432.jpg 768w, https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git-640x360.jpg 640w, https:\/\/webdevs.blog\/pl\/wp-content\/uploads\/sites\/2\/2021\/12\/git-700x394.jpg 700w\" sizes=\"auto, (max-width: 1366px) 100vw, 1366px\" \/><\/figure>\n\n\n<p>W karierze dewelopera mo\u017ce zdarzy\u0107 si\u0119 sytuacja, w kt\u00f3rej b\u0119dzie trzeba pracowa\u0107&nbsp;nad projektem korzystaj\u0105cym z rozwi\u0105za\u0144, kt\u00f3re s\u0105 ci\u0105gle rozwijane i wymagana jest \u015bcis\u0142a kontrola wersji zar\u00f3wno plik\u00f3w bazowych projektu oraz tych dodatkowych. Przyk\u0142adowo, zesp\u00f3\u0142 A pracuje nad rozwojem pluginu udost\u0119pniaj\u0105cego konkretne rozwi\u0105zanie dla WooCommerce, a zesp\u00f3\u0142 B nad trzeba sklepami, kt\u00f3re powinny z niego korzysta\u0107. Oba projekty s\u0105 w fazie rozwoju, dlatego system kontroli ich wersji b\u0119dzie odgrywa\u0142 kluczow\u0105 rol\u0119. Jak w takim wypadku zarz\u0105dza\u0107 rozwojem takich projekt\u00f3w?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Problem<\/h3>\n\n\n\n<p>Bardzo nieefektywnym by\u0142oby r\u0119czne zarz\u0105dzanie takimi projektami poprzez odzwierciedlanie w infrastrukturze sklep\u00f3w ka\u017cdej zmiany zachodz\u0105cej w pluginie. Generuje to du\u017co dodatkowej pracy oraz potencjalnych problem\u00f3w, szczeg\u00f3lnie w trakcie intensywnego rozwoju obu projekt\u00f3w. <\/p>\n\n\n\n<p>Pewnym rozwi\u0105zaniem jest wprowadzenie systemu automatycznych aktualizacji, ale do tego wymagana by\u0142aby okre\u015blona infrastruktura, kt\u00f3rej zwykle w fazie pocz\u0105tkowego rozwoju jeszcze nie ma. Dodatkowo mo\u017ce to generowa\u0107 problem z wersjonowaniem &#8211; czasem ze wzgl\u0119du na specyficzne problemy wymagany b\u0119dzie downgrade pluginu do okre\u015blonej dzia\u0142aj\u0105cej wersji. <\/p>\n\n\n\n<p>Je\u015bli zespo\u0142y s\u0105 ma\u0142e, a zmiany w obu projektach nie s\u0105 du\u017ce, taka opcja mo\u017ce si\u0119 sprawdzi\u0107, ale niestety nie b\u0119dzie to dobry wyb\u00f3r w przypadku bardziej skomplikowanych sytuacji. Z pomoc\u0105 przychodzi narz\u0119dzie <code>git submodules<\/code>, kt\u00f3re umo\u017cliwia obs\u0142ug\u0119 repozytorium w innym repozytorium rozdzielaj\u0105c je mi\u0119dzy sob\u0105. Commity wykonywane w g\u0142\u00f3wnym repozytorium s\u0105 odseparowane repozytorium skonfigurowanego jako podmodu\u0142. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jak to dzia\u0142a?<\/h3>\n\n\n\n<p>Informacje o konfiguracji podmodu\u0142\u00f3w przechowywane s\u0105 w pliku <code>.gitsubmodules<\/code>, dlatego przy inicjalizacji \u015brodowiska musimy zadba\u0107 o poprawne prawa dost\u0119pu do wszystkich repozytori\u00f3w wspomnianych w tym pliku. <\/p>\n\n\n\n<p>W momencie gdy wykonujemy <code>commit<\/code> w repozytorium bazowym, wysy\u0142ana jest r\u00f3wnie\u017c informacja o stanie repozytorium podmodu\u0142u, a dok\u0142adniej &#8211; hash commita, kt\u00f3ry by\u0142 wybrany. Przyk\u0142adowo posiadaj\u0105c <code>\/wp-content\/plugins\/woocommerce-plugin<\/code> skonfigurowany jako podmodu\u0142, repozytorium bazowe nie widzi plik\u00f3w i zmian w nich wewn\u0105trz 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\u017cona przez repozytorium bazowe i b\u0119dzie mo\u017cliwa do zatwierdzenia.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">-Subproject commit 69cd54bdd44fe3deec8f20adbf3375732bec17a8\n+Subproject commit 1746f83ded1bdd269db5029a3c79b785f5aacc57<\/code><\/span><\/pre>\n\n\n<p>Dzi\u0119ki takiemu rozwi\u0105zaniu, zarz\u0105dzanie zmianami i utrzymywanie ich stanu jest znacznie u\u0142atwione. Mamy dok\u0142adn\u0105 kontrol\u0119 nad tym, kt\u00f3ry commit z podmodu\u0142u powinien by\u0107 wykorzystywany przez kod bazowy projektu, a wszelkie zmiany w infrastrukturze s\u0105&nbsp;natychmiastowo widoczne. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Podsumowanie<\/h3>\n\n\n\n<p>Narz\u0119dzie jest niezwykle przydatne w przypadku projekt\u00f3w o podobnej architekturze jak wy\u017cej. Mo\u017cliwo\u015bci jest o wiele wi\u0119cej, dlatego zalecanym jest zapoznanie si\u0119&nbsp;z <a href=\"https:\/\/git-scm.com\/book\/en\/v2\/Git-Tools-Submodules\" target=\"_blank\" rel=\"noreferrer noopener\">oficjaln\u0105 dokumentacj\u0105<\/a>, kt\u00f3ra pozwala na dok\u0142adniejsze zrozumienie zasad dzia\u0142ania aby maksymalnie wykorzysta\u0107 je na swoja korzy\u015b\u0107.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>W karierze dewelopera mo\u017ce zdarzy\u0107 si\u0119 sytuacja, w kt\u00f3rej b\u0119dzie trzeba pracowa\u0107&nbsp;nad projektem korzystaj\u0105cym z rozwi\u0105za\u0144, kt\u00f3re s\u0105 ci\u0105gle rozwijane i wymagana jest \u015bcis\u0142a kontrola wersji zar\u00f3wno plik\u00f3w bazowych projektu oraz tych dodatkowych. Przyk\u0142adowo, zesp\u00f3\u0142 A pracuje nad rozwojem pluginu udost\u0119pniaj\u0105cego konkretne rozwi\u0105zanie dla WooCommerce, a zesp\u00f3\u0142 B nad trzeba sklepami, kt\u00f3re powinny z niego [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":259,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,15],"tags":[72,71],"class_list":["post-258","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ciekawostki","category-git","tag-git","tag-git-submodules"],"_links":{"self":[{"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/posts\/258","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/comments?post=258"}],"version-history":[{"count":7,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/posts\/258\/revisions"}],"predecessor-version":[{"id":696,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/posts\/258\/revisions\/696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/media\/259"}],"wp:attachment":[{"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/media?parent=258"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/categories?post=258"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webdevs.blog\/pl\/wp-json\/wp\/v2\/tags?post=258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}