Blog GitHub (Čeština)

nakonec bude jakýkoli zajímavý softwarový projekt záviset na jiném projektu, knihovně nebo frameworku. Git poskytuje submoduly, které vám s tím pomohou. Submoduly umožňují zahrnout nebo vložit jeden nebo více úložišť jako podsložku do jiného úložiště.

u mnoha projektů nejsou submoduly nejlepší odpovědí (více o tom níže), a dokonce i v nejlepším případě může být práce s submoduly složitá, ale začněme tím, že se podíváme na přímý příklad.,

přidání Submodule

řekněme, že pracujete na projektu s názvem Slingshot. Máte kód pro y-shaped stick a rubber-band.


flickr foto sdílí mladý@umění pod licencí Creative Commons ( licence)

Ve stejné době, v jiném úložišti, máš další projekt s názvem Rock—to je jen obecný rock knihovna, ale myslíš, že by bylo ideální pro Prak.

můžete přidat rock jako submodul slingshot., V slingshot úložiště:

V tomto bodě, budete mít rock složky uvnitř slingshot, ale pokud jste se podívat uvnitř této složky, v závislosti na verzi systému Git, můžete vidět … nic.,

Novější verze systému Git to udělá automaticky, ale starší verze bude vyžadovat, abyste explicitně říct Git stáhnout obsah z rock:

Pokud vše vypadá dobře, můžete potvrdit tuto změnu a budete mít rock, složky v slingshot úložiště s veškerý obsah z rock úložiště.,

Na GitHub, rock ikona složky bude mít trochu indikátor ukazuje, že se jedná o submodul:

kliknutím na rock složka bude mít na rock úložiště.

to je ono! Vložili jste úložiště rock do úložiště slingshot. S veškerým obsahem můžete komunikovat z rock, jako by to byla složka uvnitř slingshot (protože je).,

Na příkazovém řádku, Git příkazy vydané od slingshot (nebo některou z dalších složek, rubber-band y-shaped-stick), bude pracovat na „mateřské úložiště“, slingshot, ale příkazy vydávat od rock složka bude fungovat jen na rock úložiště:

Spojení projektu s využitím dílčích modulů

Nyní, řekněme, že jste nový spolupracovník spojování Projekt Prak., Začněte spuštěním git clone a stáhněte si obsah úložiště slingshot. V tomto okamžiku, pokud byste měli nahlédnout do složky rock, uvidíte … nic.

společnost Git opět očekává, že ji výslovně požádáme o stažení obsahu submodule., Můžete použít git submodule update --init --recursive tady stejně, ale pokud jste klonování slingshot poprvé, můžete použít modifikovaný clone příkaz k zajištění si stáhnout všechno, včetně všech dílčích modulů:

Přepnutí na submoduly

To může být trochu složitější, aby se existující podsložky a proměnit ji v externí závislost. Podívejme se na příklad.

Chystáte se zahájit nový projekt – kouzelná roll-back can – která také potřebuje rubber-band., Pojďme se rubber-band postaven pro slingshot, rozdělit to do samostatného repozitáře, a pak vložte si je do obou projektů prostřednictvím dílčích modulů.

můžete si vzít vše ze složky project Slingshot rubber-band a extrahovat ji do nového úložiště a dokonce udržovat historii odevzdání.

začněme rozbalením obsahu složky rubber-band z slingshot., Můžete použít git filter-branch jak to udělat, takže vám jen zavazuje týkající se rubber-band. Příkazgit filter-branch přepíše historii našeho úložiště, takže vypadá, jako by složka rubber-band byla po celou dobu vlastním úložištěm. Další informace o git filter-branch naleznete v tomto článku.

prvním krokem je, aby se kopie slingshot do práce na—konci-cílem je, aby rubber-band stát jako jeho vlastní úložiště, takže nechat slingshot jak je., Můžete použít cp -r rekurzivně kopírovat celé slingshot složky do nové složky rubber-band.,

vypadá To jako rubber-band slingshot, ale nyní, od rubber-band úložiště, spusťte git filter-branch:

V tomto bodě, budete mít složku rubber-band, což je úložiště, které trochu připomíná Projekt Prak, ale to má pouze soubory a zavázat se historie z rubber-band složka.,

Od doby, co jsi zkopíroval slingshot, nové úložiště bude stále nějaké vzdálené sledování větvích nastavení, kdy to bylo slingshot. Nechcete tlačit rubber-band zpět na slingshot. Chcete to posunout do nového úložiště.

vytvořte nové úložiště pro rubber-band na Githubu a poté aktualizujte dálkový ovladač pro rubber-band., Za předpokladu, že jste byli volání vzdálené origin, můžete:

Pak můžete publikovat nové „generické gumy-band modul“ git push.,

Nyní, že jste odděleni rubber-band do své vlastní úložiště, budete muset odstranit staré rubber-band složka slingshot úložiště:

aktualizovat slingshot rubber-band jako submodul:

Jako jsme viděli dříve, když jsme byli přidání rock, nyní máme úložiště-úložiště., Tři repozitáře, ve skutečnosti: „mateřské“ úložiště slingshot plus dva „sub“ repozitáře, rock rubber-band.

kromě toho, pokud se ponoříme zpět do slingshot‚historie, uvidíme se zavazuje, že jsme původně do rubber-band zpátky, když to byla složku—odstranění složky nechtěla vymazat z historie., To může být někdy trochu matoucí—od rubber-band „child“ úložiště má kopírovat-a-upravená verze z těch starých slingshot spáchá, to může někdy pocit, že jste deja-vu.

Bohužel, každý spolupracovník, který táhne slingshot v tomto bodě bude mít prázdný rubber-band složka., Možná budete chtít připomenout své spolupracovníky ke spuštění tohoto příkazu, aby bylo zajištěno, že mají všechny submodul obsahu:

Budete také chtít přidat rubber-band submodulu do magic roll-back can. Naštěstí, vše, co musíte udělat, je následovat stejný postup, který jste použili dříve, když jste přidali rock slingshot, ve „Přidání submodulu.“

Rady na použití submoduly (nebo ne)

  • předtím, Než přidáte úložiště jako submodul, nejprve zkontrolujte, zda máte lepší alternativu k dispozici., Submoduly Git fungují dostatečně dobře pro jednoduché případy, ale v těchto dnech jsou často k dispozici lepší nástroje pro správu závislostí než to, co submoduly Git mohou nabídnout. Moderní jazyky, jako je Go, mají od začátku vestavěné systémy správy závislostí git-aware. Jiní, jako Rubyho rubygems, uzel.js ‚ npm, nebo CocoaPods kakaa a Kartágo, byly přidány programovací komunitou. Dokonce i přední vývojáři mají nástroje jako Bower pro správu knihoven a rámců pro JavaScript a CSS na straně klienta.
  • nezapomeňte, že Git ve výchozím nastavení nestáhne submodulový obsah., Pokud přidáváte submodulu do existujícího projektu, ujistěte se, že někdo pracuje na projektu, ví, že je třeba spustit příkazy, jako je git submodule update git clone --recursive aby se zajistilo, že si vše—to zahrnuje automatizované nasazení nebo testování služby, které by mohly být zapojeny v projektu! Doporučujeme použít něco jako naše „Skripty vládne Všem“, aby zajistily, že všichni spolupracovníci a služby mají přístup k obsahu úložiště všude.
  • submoduly vyžadují, abyste pečlivě vyvážili konzistenci a pohodlí., Zde použité nastavení silně upřednostňuje konzistenci za cenu malého pohodlí. Obecně je nejlepší mít submoduly projektu uzamčené na konkrétní SHA, takže všichni spolupracovníci dostávají stejný obsah. Toto nastavení však také ztěžuje vývojářům v“ nadřazeném “ úložišti přispívat ke změnám zpět do úložiště submodulů.
  • Pamatujte si, že spolupracovníci nebudou automaticky aktualizuje, aby se submoduly—pokud aktualizujete submodulu, možná budete muset připomenout své kolegy, aby spustit git submodule update nebo se bude pravděpodobně vidět podivné chování.,
  • Správa dynamických, rychle se vyvíjejících nebo silně závislých úložišť s submoduly může být rychle frustrující. Tento příspěvek byl zaměřen na jednoduché, relativně statické rodič-dítě úložiště vztahy. Budoucí následný příspěvek podrobně popisuje některé strategie, které pomohou spravovat složitější pracovní postupy submodulů.

další čtení

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *