végül minden érdekes szoftverprojekt egy másik projekttől, könyvtártól vagy keretrendszertől függ. A Git submodulákat biztosít ehhez. Az almodulák lehetővé teszik, hogy egy vagy több tárolót almappaként egy másik tárolóba helyezzen be vagy ágyazzon be.
sok projekt esetében a submodules nem a legjobb válasz (erről bővebben alább), sőt a legjobb esetben is az almodulokkal való munka trükkös lehet, de kezdjük egy egyenesen előre mutató példával.,
Submodule hozzáadása
 tegyük fel, hogy egy Slingshot nevű projekten dolgozik. y-shaped stick és a rubber-bandkódja van.

flickr photo shared by young@art under a Creative Commons ( BY ) license 
ugyanakkor, egy másik adattárban, van egy másik projekt nevű Rock—ez csak egy általánosrock könyvtár, de úgy gondolja, hogy tökéletes lenne a csúzli.
rockslingshotalmodulként adható hozzá., A slingshot adattár:
Ezen a ponton, akkor egy rock mappa belsejében slingshot, de ha úgy döntesz, hogy kandikál be a mappába, attól függően, hogy a változat Git, talán látsz … semmit.,
az Újabb verziók a Git megteszi ezt automatikusan, de a régebbi verziók lesz szükség, hogy kifejezetten mondja Git, hogy töltse le a tartalmát rock:
Ha mindent jól néz ki, lehet elkövetni, ez a változás majd, egy rock mappa a slingshot adattár minden tartalom a rock adattár.,
a GitHub, a rock mappa ikon lesz egy kis mutató azt mutatja, hogy ez egy almodul:

és kattintson a rock mappa elviszi át a 
adattár.
 ennyi! A rock tárolót a slingshot tárolóba ágyazta. A rock összes tartalmával kölcsönhatásba léphet, mintha a slingshot mappában lenne (mert az).,
a parancssori, Git parancsokat kiadni a slingshot (vagy bármely más mappákat, rubber-band vagy y-shaped-stick) fog működni a “szülő adattár”, slingshot, de parancsok kérdés, hogy a rock mappa fog működni, csak a rock adattár:
Csatlakozás projekt segítségével submodules
Most, mondja, hogy egy új munkatárs csatlakozott Projekt Csúzli., A git clone futtatásával letöltheti a slingshot tároló tartalmát. Ezen a ponton, ha belenézne a rock mappába, akkor semmit sem látna.
 ismét a Git elvárja tőlünk, hogy kifejezetten kérje meg az almodul tartalmának letöltését., Használja a git submodule update --init --recursive itt is, de ha a klónozás slingshot az első alkalommal használja a módosított clone parancs annak érdekében, hogy töltse le mindent, beleértve bármely submodules:
Váltás submodules
Ez egy kicsit trükkös, hogy egy meglévő almappát, majd kapcsolja be a külső függőség. Nézzünk egy példát.
új projektet indítasz-egy magic roll-back can-t -, amelynek szintén szüksége van egy rubber-band – ra., Vegyük a rubber-banda slingshot számára épített 
mindent elvehet a projekt Slingshot rubber-band mappájából, majd kibonthatja egy új tárolóba, sőt megtarthatja a commit előzményeket.
 kezdjük a rubber-band mappa tartalmának kibontásával a slingshotmappából., Ehhez használhatja a git filter-branch – ot, így csak a rubber-band – hoz kapcsolódó kötelezettségvállalásokat hagyhatja. Agit filter-branch parancs átírja az adattár történetét, így úgy néz ki, mintha a rubber-band mappa végig a saját tárolója volt. További információ a git filter-branch, lásd ezt a cikket.
az első lépés az, hogy egy példányt aslingshot dolgozni-a végső cél az rubber-band állni, mint a saját adattár, így hagyja slingshot ahogy van., Acp-r segítségével rekurzívan másolhatja a teljesslingshot mappát egy új mappábarubber-band.,
úgy néz ki, mint rubber-band csak egy másik slingshot, de most, a rubber-band adattár, fuss git filter-branch:
Ezen a ponton, akkor van egy mappa rubber-band, amely egy tároló, hogy egyfajta hasonlít Project Slingshot, de csak a fájlokat, és elkövetni története a rubber-band mappa.,
mivel ezt aslingshot – ból másolta, az új tárolónak továbbra is vannak olyan távoli nyomkövető ágai, amelyeket beállítottál, amikorslingshotvolt. Nem akarja a rubber-band slingshot – ra tolni. Azt akarod, hogy álljon ez egy új tároló.
Hozzon létre egy új tárolórubber-band A GitHub, majd frissítse a távolirubber-band., Feltételezve, hogy a távvezérlőt origin, akkor:
akkor közzéteheti az új “általános gumiszalag-modult” git push.,
Most, hogy már elválasztott rubber-band a saját repository -, el kell törölni a régi rubber-band mappa a slingshot adattár:
Akkor update slingshot, hogy a rubber-band mint egy részmodult:
Mint láttuk korábban, amikor voltunk, hozzátéve, hogy a rock, most már van egy repository-az-adattár., Három adattár, valójában: a” szülő ” adattár slingshot, plusz a két “sub” adattár, rock és rubber-band.
ezenkívül, ha visszatérünk a slingshotelőzményeibe, látni fogjuk az eredetileg a rubber-band mappába tett kötelezettségvállalásokat—a Mappa törlése nem törölte az előzményeket., Ez néha lehet egy kicsit zavaró, mivel a rubber-band “gyermek” adattár másolt-meg-módosított változata a régi slingshot vállalja, néha érzem, hogy déja vu.
 sajnos minden olyan munkatárs, aki slingshot húzza, ezen a ponton üres rubber-band mappa lesz., Érdemes emlékeztetnie munkatársait, hogy futtassák ezt a parancsot annak biztosítása érdekében, hogy rendelkezzenek az összes almodul tartalmával:
hozzá kell adnia a rubber-band submodule magic roll-back can. Szerencsére csak annyit kell tennie, hogy ugyanazt az eljárást kövesse, amelyet korábban használt, amikor hozzáadta a rockslingshot, a ” submodul hozzáadása.”
submodules (vagy nem)
- mielőtt egy adattárat submodulként adna hozzá, először ellenőrizze, hogy van-e jobb alternatíva., A Git almodulák elég jól működnek az egyszerű esetekhez, de manapság gyakran jobb eszközök állnak rendelkezésre a függőségek kezelésére, mint amit a Git almodulák kínálhatnak. Az olyan modern nyelvek, mint a Go, már a kezdetektől fogva barátságos, Git-tudatos függőségkezelő rendszerekkel rendelkeznek. Mások, mint Ruby rubygems, csomópont.a JS ‘ npm-et, vagyis a Cocoapods-ot és Carthage-t a programozó közösség egészítette ki. Még a front-end fejlesztőknek is vannak olyan eszközei, mint a Bower a kliens oldali JavaScript és CSS könyvtárainak és keretrendszereinek kezelésére.
 - ne feledje, hogy a Git alapértelmezés szerint nem tölti le az almodul tartalmát., Ha hozzáad egy almodulot egy meglévő projekthez, győződjön meg róla, hogy bárki, aki a projekten dolgozik, tudja, hogy olyan parancsokat kell futtatnia, mint a 
git submodule updateésgit clone --recursiveannak biztosítása érdekében, hogy mindent megkapjon—ez magában foglal minden olyan automatizált telepítési vagy tesztelési szolgáltatást, amely részt vehet a projektben! Javasoljuk, hogy használja valami hasonló a “Scripts szabály őket” annak biztosítása érdekében, hogy minden együttműködő és szolgáltatások hozzáférhetnek az azonos tároló tartalom mindenhol. - Submodules megkövetelik, hogy gondosan egyensúlyt konzisztencia és a kényelem., Az itt használt beállítás erősen kedveli a konzisztenciát, egy kis kényelem árán. Általában a legjobb, ha egy projekt almoduljait egy adott SHA-hoz zárolják, így minden munkatárs ugyanazt a tartalmat kapja. De ez a Beállítás megnehezíti a fejlesztők számára a “szülő” repository hozzájárulni változások vissza a submodule repository.
 - ne feledje, hogy az együttműködők nem fogják automatikusan látni a submodules frissítéseit—ha frissíti az almodulot, előfordulhat, hogy emlékeztetnie kell kollégáit a 
git submodule updatefuttatására, vagy valószínűleg furcsa viselkedést fognak látni., - a dinamikus, gyorsan fejlődő vagy erősen társfüggő tárolók kezelése az almodulokkal gyorsan frusztrálóvá válhat. Ez a bejegyzés az egyszerű, viszonylag statikus szülő-gyermek tároló kapcsolatokra összpontosított. A jövőbeli nyomon követési üzenet részletesen bemutatja néhány stratégiát, amelyek segítenek a bonyolultabb submodules munkafolyamatok kezelésében.