gitaarik/git_submodules. md
waarom submodules?
In Git kun je een submodule toevoegen aan een repository. Dit is in principe een Depository ingebed in je hoofd repository. Dit kan erg nuttig zijn. Een paar voordelen van het gebruik van submodules:
-
u kunt de code scheiden in verschillende repositories.
handig als u een codebase met grote componenten hebt, kunt u van een component een submodule maken. Op deze manier heb je een cleaner Git log(commits zijn specifiek voor een bepaald component).,
-
u kunt de submodule aan meerdere repositories toevoegen.
handig als u meerdere repositories hebt die dezelfde componenten delen. Met deze aanpak kun je eenvoudig die componenten in alle repositories updaten die ze als een submodule hebben toegevoegd.Dit is een stuk aangenamer dan het kopiëren-plakken van de code in de depositories.
Basics
wanneer je een submodule toevoegt in Git, voeg je niet de code van thesubmodule toe aan de hoofd repository, je voegt alleen informatie toe over thesubmodule die is toegevoegd aan de hoofd repository., Deze informatie beschrijft naar welke commit de submodule wijst. Op deze manier wordt de”S code”van de submodule niet automatisch bijgewerkt als de”srepository” van de submodule wordt bijgewerkt. Dit is goed, omdat je code mogelijk niet werkt met de laatste commit van de submodule, voorkomt het onverwachte gedrag.,
het Toevoegen van een submodule
U kunt een submodule naar een gegevensopslagruimte zoals dit:
Met de standaard configuratie, zal dit check out de code van deawesome_submodule.git
gegevensopslagruimte naar de path_to_awesome_submodule
map, en zal het toevoegen van informatie aan het centraal archief aboutthis submodule, die bevat de vastlegging van de submodule punten,die zal worden de huidige commit van de standaard tak (meestalmaster
tak) op het moment dat de opdracht is uitgevoerd.,
Na deze bewerking, als u een git status
uitvoert, ziet u twee bestanden in de Changes to be committed
lijst: het .gitmodules
bestand en het pad naar de submodule. Als je deze bestanden commit en pusht, dan commit/Push je de submodule naar de origin.
de code van de submodule ophalen
als een nieuwe submodule door één persoon wordt aangemaakt, moeten de andere mensen in het team deze submodule starten. Eerst moet je de informatie over de submodule krijgen, deze wordt opgehaald door een normalegit pull
., Als er nieuwe submodules zijn, zie je het in de uitvoer vangit pull
. Dan moet je ze initiëren met:
Dit zal alle code uit de submodule halen en in de map plaatsen waarvoor het is geconfigureerd.
als je een repository hebt gekloond die gebruik maakt van submodules, moet je dit commando ook uitvoeren om de code van de submodule te krijgen. Dit wordt niet automatisch gedaan door git clone
.
het pushen van updates in de submodule
de submodule is slechts een aparte repository., Als je er wijzigingen in wilt aanbrengen, moet je de wijzigingen in deze repository maken en ze pushen als in een gewone Git repository (voer gewoon de git commando ‘ s uit in de directory van de submodule). Je moet echter ook de mainrepository laten weten dat je de repository van de submodule”hebt bijgewerkt”, en makeit gebruikt de laatste commit van de repository van de submodule. Want als je nieuwe commits maakt in een submodule, zal de hoofd repository nog steeds naar de oude commit wijzen.,
dus, als je deze wijzigingen ook in je hoofd repository wilt hebben, moet je de hoofd repository vertellen om de laatste commit van de submodule te gebruiken. Hoe doe je dit?
dus je hebt wijzigingen gemaakt in de repository van de submodule en ze gecommit in de repository. Als u nu een git status
in het hoofdrepository uitvoert, zult u zien dat de submodule in de lijst Changes not staged for commit
staat en de tekst (modified content)
erachter staat.Dit betekent dat de code van de submodule wordt uitgecheckt op een andere commit dan waar de hoofd repository naar verwijst., Om de hoofdrepository naar deze nieuwe commit te laten wijzen, voeg je deze verandering gewoon toe met git add
en dan commit en push je het.
uw submodules up-to-date houden
als iemand een submodule heeft bijgewerkt, moeten de andere teamleden de code van hun submodules bijwerken. Dit wordt niet automatisch gedaan doorgit pull
, omdat met git pull
alleen de informatie wordt opgehaald dat de submodule naar een andercommit wijst, maar de code van de submodule niet wordt bijgewerkt., Om de code van uw submodules bij te werken, moet u het volgende uitvoeren:
Wat gebeurt er als u dit commando niet uitvoert?
als je dit commando niet uitvoert, wordt de code van je submodule uitgecheckt naar een oude commit. Als u git status
doet, ziet u de submodule in de Changes not staged for commit
lijst met de tekst(modified content)
erachter. Dit is niet omdat je de code van de submodule hebt gewijzigd, maar omdat de code is uitgechecked naar een andere commit. Dus Git ziet dit als een verandering, maar eigenlijk heb je de code van de submodule niet bijgewerkt., Dus als je met submodules werkt, vergeet dan niet om je submodules up-to-date te houden.
maakt het voor iedereen makkelijker
Het is soms vervelend als u vergeet uw submodules te starten en bij te werken. Gelukkig zijn er enkele trucs om het makkelijker te maken:
Dit zal de submodules bijwerken, en als ze nog niet zijn gestart, zal ze initiëren.
u kunt ook submodules in submodules hebben., In dit geval”wilt u de submodules recursief bijwerken/initiëren:
Dit is veel om te typen, zodat u een alias kunt maken:
wanneer u git update
uitvoert, zal het een Anda git submodule update --init --recursive
, waardoor alle codein uw project wordt bijgewerkt.