Lopulta, kaikki mielenkiintoinen ohjelmisto, projekti tulee riippua toisen projektin, kirjasto tai kehys. Git tarjoaa submodules auttaa tässä. Submodules voit sisällyttää tai upottaa yhden tai useamman arkiston toisen arkiston alakansioksi.
useita hankkeita, alamoduulia eivät ole paras vastaus (lisää tästä alla), ja jopa parhaimmillaan kanssa alamoduulia voi olla hankalaa, mutta aloitetaan katsomalla suoraviivainen esimerkki.,
lisätään Submodule
sanotaan, että olet tekemässä projektia nimeltä Slingshot. Sinulla on koodi y-shaped stick
ja rubber-band
.
flickr-photo jaettu nuori@art Creative Commons ( BY ) – lisenssillä
samaan aikaan toisessa arkistossa, sinulla on toinen hanke, nimeltään Rock—se on vain yleinen rock
library, mutta luuletko, että se olisi täydellinen Ritsa.
lisää rock
kuten submodule on slingshot
., slingshot
arkisto:
tässä vaiheessa sinulla on rock
kansion sisälle slingshot
, mutta jos haluat kurkata, että kansioon, riippuen version Git, saatat nähdä … ei mitään.,
Uudemmat versiot Git tekee tämän automaattisesti, mutta vanhemmat versiot vaativat voit selvästi kertoa Git ladata sisältöä rock
:
Jos kaikki näyttää hyvältä, voit tehdä tämän muutoksen ja sinulla on rock
kansio slingshot
arkiston kaikki sisällön rock
arkistoon.,
GitHub, rock
kansion kuvake on pieni merkkivalo, joka osoittaa, että se on submodule:
Ja klikkaamalla rock
kansio vie sinut yli rock
arkistoon.
That ’ s it! Olet upotettu rock
repository sisälle slingshot
arkistoon. Voit olla vuorovaikutuksessa kaikki sisällön rock
ikään kuin se olisi kansio sisälle slingshot
(koska se on).,
komento-line, Git komentoja, jotka on myönnetty slingshot
(tai muita kansioita, rubber-band
ja y-shaped-stick
) toimivat ”emo repository”, slingshot
, mutta komennot asiaa rock
kansio toimii vain rock
arkisto:
Liittyminen hankkeen avulla alamoduulia
Nyt, sanoa, että olet uusi yhteistyökumppani liittyä Hankkeen Ritsa., Voisit aloittaa käynnissä git clone
ladata sisällön slingshot
arkistoon. Tässä vaiheessa, jos kurkistaisit rock
– kansioon, näkisit … ei mitään.
Jälleen, Git odottaa meidän nimenomaisesti pyytää sitä ladata submodule sisältöä., Voit käyttää git submodule update --init --recursive
täällä, mutta jos olet kloonaus slingshot
ensimmäistä kertaa, voit käyttää muutettu clone
komento jotta voit ladata kaiken, mukaan lukien kaikki alamoduulia:
Siirtyminen alamoduulia
Se voi olla hieman hankala ottaa olemassa olevan alikansion ja muuttaa sen ulkoista riippuvuutta. Katsotaanpa esimerkkiä.
olet aloittamassa uutta projektia—magic roll-back can–joka tarvitsee myös rubber-band
., Otetaanpa rubber-band
olet rakennettu slingshot
, jakaa sen ulos stand alone-arkistoon, ja sitten upottaa se osaksi molempien hankkeiden kautta alamoduulia.
Voit ottaa kaiken Hankkeen Ritsa rubber-band
kansio ja pura se uuden arkiston, ja jopa säilyttää tehnyt historiaa.
aloitetaan uuttamalla sisältö rubber-band
kansion pois slingshot
., Voit käyttää git filter-branch
voit tehdä tämän, sinulle jää vain sitoutuu liittyvät rubber-band
. git filter-branch
komento tulee kirjoittaa arkistossa on historia, joten se näyttää kuin jos rubber-band
kansio oli ollut se oma repository koko ajan. Lisätietoja git filter-branch
: stä on tässä artikkelissa.
ensimmäinen askel on tehdä kopio slingshot
töihin—loppu-tavoitteena on, että rubber-band
seistä sen oma repository, joten jätä slingshot
niin on., Voit käyttää cp
-r
rekursiivisesti kopioida koko slingshot
kansio uusi kansio rubber-band
.,
Se näyttää siltä kuin rubber-band
on vain yksi slingshot
, mutta nyt, rubber-band
arkisto, ajaa git filter-branch
:
tässä vaiheessa sinulla on kansio rubber-band
, joka on kokoelma, joka tavallaan muistuttaa Hankkeen Ritsa, mutta se on vain tiedostoja ja tehnyt historiaa rubber-band
kansio.,
Koska olet kopioinut tämän slingshot
, uusi repository on vielä mitään kauko seuranta oksat setup kun se oli slingshot
. Et halua työntää rubber-band
takaisin slingshot
. Haluat työntää tämän uuteen arkistoon.
Luoda uuden arkiston rubber-band
GitHub, sitten päivittää kauko rubber-band
., Olettaen, että olet soittaa kauko – origin
, voit:
Sitten voit julkaista uuden ”yleinen kumi-band-moduuli”, jossa git push
.,
Nyt kun olet erotettu rubber-band
omaan arkistoon, sinun täytyy poistaa vanha rubber-band
kansio slingshot
repository:
päivitä slingshot
käyttää rubber-band
kuten submodule:
Kuten näimme ennen, kun olimme lisäämällä rock
, meillä on nyt repository-in-a-arkistoon., Kolme arkistot, itse asiassa: ”emo” repository slingshot
, plus kaksi ”sub” arkistot, rock
ja rubber-band
.
lisäksi, jos me sukeltaa takaisin slingshot
’s historiaa, näemme sitoutuu me alun perin tehty rubber-band
takaisin, kun se oli kansio—poistaa kansion tiennyt, poistaa kaikki historian., Tämä voi joskus olla hieman sekava, koska rubber-band
”lapsi” arkisto on kopioitu ja muokattu versio nuo vanhat slingshot
sitoutuu, se voi joskus tuntua siltä, että olet ottaa deja vu.
Valitettavasti, mitään yhteistyökumppani, joka vetää slingshot
tässä vaiheessa on tyhjä rubber-band
kansio., Haluat ehkä muistuttaa yhteistyökumppaneita, suorita tämä komento varmistaa, että ne ovat kaikki submodule sisältö:
saat myös haluavat lisää rubber-band
submodule että magic roll-back can
. Onneksi kaikki sinun täytyy tehdä, on noudattaa samaa menettelyä, jota käytit aiemmin, kun olet lisännyt rock
ja slingshot
, vuonna ”Lisäämällä submodule.”
Neuvoja käyttämällä alamoduulia (tai ei)
- Ennen kuin lisäät repository kuin submodule, tarkista ensin nähdä, jos sinulla on parempi vaihtoehto käytettävissä., Git-alimodulit toimivat riittävän hyvin yksinkertaisissa tapauksissa, mutta nykyään on usein olemassa parempia työkaluja riippuvuuksien hallintaan kuin mitä git-alimodulit voivat tarjota. Moderneja kieliä, kuten Go on ystävällinen, Git-tietoinen riippuvuus hallintajärjestelmät sisäänrakennettu alusta. Toiset, kuten Rubyn rubygemit, solmu.JS ’npm eli Cocoa’ s CocoaPods ja Carthage on lisätty ohjelmointiyhteisöön. Jopa etupään kehittäjillä on Bowerin kaltaisia työkaluja kirjastojen ja puitteiden hallintaan asiakaspuolen JavaScriptille ja CSS: lle.
- Muista, että Git ei lataa submodule sisällön oletuksena., Jos olet lisäämällä submodule olemassa olevan projektin, varmista, että jokainen, joka toimii hankkeen tietää, että he tarvitsevat suorittaa komennot kuten
git submodule update
jagit clone --recursive
jotta he saavat kaiken—tämä sisältää kaikki automatisoitu asennus tai testing service, joka voisi olla mukana hankkeessa! Suosittelemme, että käytät jotain meidän ”Skriptit hallitsemaan Heitä Kaikkia” varmistaa, että kaikki yhteistyökumppanit ja palvelut on pääsy samaan arkiston sisältö kaikkialla. - Submodules edellyttää, että tasapainotat huolellisesti johdonmukaisuuden ja mukavuuden., Tässä käytetty setup suosii vahvasti johdonmukaisuutta, kustannuksella hieman mukavuutta. On yleensä parasta olla projektin submodules lukittu tiettyyn SHA, joten kaikki yhteistyökumppanit saavat samaa sisältöä. Mutta tämä asetus tekee myös ”emoyhtiön” arkiston kehittäjien vaikeaksi edistää muutoksia takaisin submodule-arkistoon.
- Muista, että yhteistyökumppaneita ei automaattisesti nähdä päivityksiä alamoduulia—jos päivität submodule, sinun täytyy ehkä muistuttaa työtovereiden ajaa
git submodule update
tai he todennäköisesti nähdä outoa käyttäytymistä., - dynaamisten, nopeasti kehittyvien tai voimakkaasti riippuvaisten arkistojen hallinta submoduleilla voi käydä nopeasti turhauttavaksi. Tämä viesti keskittyi yksinkertaisiin, suhteellisen staattisiin vanhemman ja lapsen arkistointisuhteisiin. Seuraavassa seurantatiedotteessa esitellään joitakin strategioita, joiden avulla voidaan hallita monimutkaisempia alivalmiita työnkulkuja.