gitaarik/git_submodules.md (Čeština)
Proč submoduly?
v GIT můžete do úložiště přidat submodul. To je v podstatě arepository vložené do hlavního úložiště. To může být velmiužitečné. Několik výhod používání submodulů:
-
kód můžete oddělit do různých úložišť.
užitečné pokud máte kódovou základnu s velkými komponenty, můžete acomponent vytvořit submodul. Tímto způsobem budete mít Cleaner git log(commity jsou specifické pro určitou součást).,
-
submodul můžete přidat do více úložišť.
užitečné, pokud máte více úložišť, které sdílejí stejné komponenty. S tímto přístupem je můžete snadno aktualizovatkomponenty ve všech úložištích, které je přidaly jako submodul.To je mnohem pohodlnější než zkopírovat kód do úložišť.
Základy
Když přidáte submodulu v Git, jste don“t přidat kód thesubmodule do hlavního repozitáře, si jen přidat informace o thesubmodule, která je přidána do hlavního repozitáře., Tato informacepopisy, na které se zavazuje submodul, směřují. Tímto způsobem, thesubmodule“s kód nebude automaticky aktualizován, pokud submodule“srepository je aktualizován. To je dobře, protože váš kód může nepráce s nejnovější odevzdání submodulu, zabraňuje unexpectedbehaviour.,
Přidání submodul
můžete přidat submodul k úložišti, jako je tento:
S výchozí konfiguraci, bude to podívejte se na kódawesome_submodule.git
úložiště path_to_awesome_submodule
adresář a přidá informace do hlavního úložiště o submodul, který obsahuje spáchat submodul bodů,které bude aktuální spáchat výchozí větev (obvyklemaster
pobočka) v době, kdy tento příkaz je proveden.,
Po této operaci, pokud si git status
you“ll vidět dva soubory v Changes to be committed
seznam: .gitmodules
soubor a pathto v submodulu. Když odevzdáte a stisknete tyto soubory, odevzdáte / pushthe submodule k původu.
získání kódu submodule “ s
Pokud je nový submodul vytvořen jednou osobou, ostatní lidé vtým musí zahájit tuto submodulu. Nejprve musíte získatinformace o submodulu, toto je načteno normálnímgit pull
., Pokud existují nové submoduly, uvidíte je na výstupugit pull
. Pak je budete muset iniciovat pomocí:
to vytáhne veškerý kód z submodule a umístí jej do adresáře, na který je nakonfigurován.
Pokud jste klonovali úložiště, které využívá submoduly, měli byste tento příkaz Spustit, abyste získali kód submodule. To není automaticky provedeno git clone
.
posouvání aktualizací v submodulu
submodule je pouze samostatným repozitářem., Pokud chcete, aby spolehlivá, byste měli provést změny v této evidenci a tlačit je třeba pravidelně Git repository (jen spustit git příkazy v thesubmodule“s adresáři). Nicméně, měli byste také nechat mainrepository vědět, že jste“jsem aktualizoval submodul“s repository, a přežil to používat nejnovější commit do úložiště submodulu. Protože pokud v submodulu vytvoříte nové commity, hlavní repozitář bude ukazovat na staré commit.,
Takže, pokud chcete mít tyto změny ve své hlavní úložiště, měli byste říct, hlavní úložiště používat nejnovější odevzdání thesubmodule. Jak to teď děláš?
takže jste provedli změny v submodulovém úložišti a zavázali jste jev jeho úložišti. Pokud si nyní udělat git status
v mainrepository, you“ll vidět, že submodulu je v seznamu Changes not staged for commit
text (modified content)
za to.To znamená, že kód submodulu je kontrolována na jinou spáchat, než hlavní úložiště je ukazuje., Tomake hlavní úložiště, přejděte na tento nový commit, jen addthis změnit s git add
a pak commit a push.
Udržujte své submoduly aktuální
Pokud někdo aktualizoval submodul, měli by ostatní členové týmu aktualizovat kód svých submodulů. To je automaticky provedeno pomocígit pull
, protože git pull
načítá pouze informace, že submodul ukazuje anothercommit, ale nemá“t aktualizovat submodul“s kódem., Aktualizovat kód vašeho submoduly, měli byste spustit:
Co se stane, pokud si don“t spustit tento příkaz?
Pokud tento příkaz nespustíte, kód vašeho submodulu je checkedout ke starému odevzdání. Když to budete dělat git status
uvidíte thesubmodule v Changes not staged for commit
seznam s textem(modified content)
za to. To není proto, že jste změnili thesubmodule kód, ale proto, že jeho kód je odhlášen na jinékomit. Takže Git to vidí jako změnu, ale ve skutečnosti youjust neaktualizoval kód submodule., Takže pokud pracujete ssubmoduly, nezapomeňte udržovat vaše submoduly aktuální.
usnadňuje všem
někdy je nepříjemné, pokud zapomenete iniciovat a aktualizovat svésubmoduly. Naštěstí existují některé triky, které usnadňují:
tím se aktualizují submoduly, a pokud ještě nejsou zahájeny, willinitiate je.
můžete mít také submoduly uvnitř submodulů., V tomto případě vás“llwant aktualizovat/zahájení podmoduly rekurzivně:
Toto je hodně typu, takže si můžete udělat alias:
Nyní, když jste spustit git update
, to bude spustit git pull
a git submodule update --init --recursive
, tak aktualizovat všechny codein váš projekt.