gitaarik / git_submodules. md

0 Comments

dlaczego podmoduły?

w Git możesz dodać podmodule do repozytorium. Jest to w zasadzie narzędzie osadzone w głównym repozytorium. To może być bardzo przydatne. Kilka zalet korzystania z podmodułów:

  • możesz rozdzielić kod na różne repozytoria.

    przydatne, jeśli masz bazę kodową z dużymi komponentami, możesz uczynić komponent podmodułem. W ten sposób będziesz miał czystszy Git log(commity są specyficzne dla danego komponentu).,

  • możesz dodać podmoduł do wielu repozytoriów.

    przydatne, jeśli masz wiele repozytoriów, które dzielą te same komponenty. Dzięki temu podejściu można łatwo aktualizować teskładniki we wszystkich repozytoriach, które dodały je jako podmoduł.Jest to o wiele bardziej wygodne niż kopiowanie kodu do baz.

podstawy

kiedy dodajesz submodule w Git, nie dodajesz kodu tego submodule do głównego repozytorium, dodajesz tylko informacje o tym submodule, które są dodawane do głównego repozytorium., Informacja ta wskazuje na to, na co składa się podmoduł. W ten sposób Kod submodule zostanie automatycznie zaktualizowany, jeśli podmodule srepository zostanie zaktualizowany. Jest to dobre, ponieważ twój kod może nie działać z najnowszym commitem podmodułu, uniemożliwia nieoczekiwane zachowanie.,

dodawanie podmodułu

możesz dodać podmoduł do repozytorium w następujący sposób:

przy domyślnej konfiguracji spowoduje to Sprawdzenie kodu repozytoriumawesome_submodule.git do katalogupath_to_awesome_submodulei doda do głównego repozytorium informacje o podmodule this, który zawiera commit, do którego odnosi się podmodule, który będzie aktualnym commitem domyślnej gałęzi (Zwykle gałęzimaster) w momencie wykonywania tego polecenia.,

Po tej operacji, jeśli wykonasz git statuszobaczysz dwa pliki wChanges to be committedlistę: plik.gitmodules I ścieżkę do podmodułu. Kiedy zatwierdzasz i wypychasz te pliki, zatwierdzasz / pushthe submodule do źródła pochodzenia.

uzyskanie kodu submodule

Jeśli Nowa submodule jest tworzona przez jedną osobę, inne osoby w zespole muszą zainicjować ten submodule. Najpierw musisz uzyskać informacje o podmodule, jest to pobierane przez normalny git pull., Jeśli są nowe podmoduły, zobaczysz je na wyjściugit pull. Następnie będziesz musiał je zainicjować za pomocą:

spowoduje to pobranie całego kodu z podmodułu i umieszczenie go w katalogu, w którym jest skonfigurowany.

Jeśli sklonowałeś repozytorium, które korzysta z podmodułów, powinieneś również uruchomić to polecenie, aby uzyskać kod podmodułu. Jest to nieautomatycznie zrobione przez git clone.

wyświetlanie aktualizacji w podmodule

podmodule jest tylko oddzielnym repozytorium., Jeśli chcesz wprowadzić zmiany w tym repozytorium, powinieneś wprowadzić zmiany w tym repozytorium i wypchnąć je jak w zwykłym repozytorium Git (po prostu wykonaj polecenia git w katalogu submodule). Jednak powinieneś również powiadomić mainrepository, że „zaktualizowałeś repozytorium submodule” i zmusić go do użycia najnowszego commita repozytorium submodule. Ponieważ jeśli wprowadzisz nowe commity w podmodule, główne repozytorium będzie wskazywało na stary commit.,

Tak więc, jeśli chcesz mieć te zmiany również w głównym repozytorium, powinieneś poinformować główne repozytorium, aby używało najnowszego commita z thesubmodule. Jak ty to robisz?

dokonałeś więc zmian w repozytorium podmodułu i zatwierdziłeś je w jego repozytorium. Jeśli teraz wykonasz git status w mainrepository, zobaczysz, że podmoduł znajduje się na liście Changes not staged for commit I ma tekst (modified content) za nim.Oznacza to, że kod podmodułu jest sprawdzany w innym commicie niż wskazuje główne repozytorium., W głównym repozytorium wskaż ten nowy commit, po prostu dodaj tę zmianę za pomocą git add, a następnie zatwierdź i wypchnij ją.

aktualizowanie podmodułów

Jeśli ktoś zaktualizował podmoduł, inni członkowie zespołu powinni zaktualizować kod swoich podmodułów. Nie jest to wykonywane automatycznie przezgit pull, ponieważ git pull pobiera tylko informacje, że podmoduł wskazuje na inną komendę, ale nie aktualizuje kodu podmodułu., Aby zaktualizować kod swoich podmodułów, należy uruchomić:

co się stanie, jeśli nie uruchomisz tego polecenia?

Jeśli nie uruchomisz tego polecenia, kod twojego podmodułu jest sprawdzany do starego commita. Gdy wykonasz git statuszobaczysz moduł wChanges not staged for commitz tekstem(modified content) za nim. To nie dlatego, że zmieniłeś kod module, ale dlatego, że jego kod jest sprawdzany do innego polecenia. Więc Git widzi to jako zmianę, ale tak naprawdę nie zaktualizowałeś kodu podmodułu., Więc jeśli pracujesz zsubmodules, nie zapomnij zachować swoich podmodules up-to-date.

ułatwianie wszystkim

czasami jest to denerwujące, jeśli zapomnisz zainicjować i zaktualizować swoje module. Na szczęście istnieją pewne sztuczki, które ułatwiają:

spowoduje to aktualizację podmodułów, a jeśli nie zostaną jeszcze zainicjowane, zainicjuje je.

Możesz również mieć podmoduły wewnątrz podmodułów., W tym przypadku”llwant do aktualizacji/zainicjować podmodule rekurencyjnie:

To jest dużo do wpisania, więc można utworzyć alias:

teraz, gdy wykonasz git update, wykona on git update div id=”e7fdd801b8″> andagit submodule update --init --recursive, aktualizując w ten sposób cały kod w Twoim projekcie.


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *