GitHub Blogi

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 ja git 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.

kirjallisuutta

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *