gitaarik/git_submodules.md (Norsk)
Hvorfor submodules?
I Git du kan legge til et submodule til et depot. Dette er i utgangspunktet arepository innebygd i din viktigste depotet. Dette kan være veryuseful. Et par av fordelene med å bruke submodules:
-
Du kan skille koden inn i ulike registre.
Nyttig hvis du har en codebase med store komponenter, kan du gjøre acomponent en submodule. På denne måten kan du»ll har en renere Git log(begår er spesifikke for en bestemt komponent).,
-
Du kan legge submodule til flere registre.
Nyttig hvis du har flere depoter som deler samecomponents. Med denne tilnærmingen kan du enkelt oppdatere thosecomponents i alle kjeldene som har lagt dem som en submodule.Dette er en mye mer convienient enn klipp-og-lim koden inn i therepositories.
Grunnleggende
Når du legger til en submodule i Git, du don»t å legge til koden for thesubmodule til de viktigste depotet, du bare legge til informasjon om thesubmodule som er lagt til de viktigste depotet., Dette informationdescribes som begår den submodule peker på. På denne måten, thesubmodule»s koden vunnet»t automatisk bli oppdatert hvis submodule»srepository er oppdatert. Dette er bra, fordi koden din kan notwork med den nyeste forplikte seg av submodule, det hindrer unexpectedbehaviour.,
Legge til en submodule
Du kan legge til et submodule til et depot som dette:
Med standard konfigurasjon, dette vil sjekke ut den kodenawesome_submodule.git
arkiv path_to_awesome_submodule
– katalogen, og vil legge til informasjon til de viktigste depotet omdenne submodule, som inneholder begå submodule poeng til,som vil være gjeldende innlegging av standard gren (vanligvismaster
branch) på den tiden du bruker denne kommandoen.,
Etter denne operasjonen, hvis du gjør en git status
du»ll se to filer inthe Changes to be committed
liste: .gitmodules
fil og pathto den submodule. Når du begår, og skyve disse filene du forplikte/pushthe submodule til opprinnelsen.
Få submodule»s kode
Hvis en ny submodule er laget av en person, den andre i theteam trenger for å starte denne submodule. Først må du få informasjonen om submodule, dette er hentet ved en normalgit pull
., Hvis det er nye submodules du»ll se det i utgangen avgit pull
. Så du»ll nødt til å starte dem med:
Dette vil trekke all koden fra submodule og plasser det i thedirectory at det er konfigurert til.
Hvis du»ve klonet et depot som gjør bruk av submodules, du shouldalso kjør denne kommandoen for å få submodule»s kode. Dette er notautomatically gjort av git clone
.
Presser oppdateringer i submodule
submodule er bare et eget depot., Hvis du ønsker å gjøre changesto det, bør du gjøre endringer i dette depotet, og skyv dem likein en vanlig Git repository (bare kjøre git-kommandoer i thesubmodule»s katalog). Imidlertid, du bør også la mainrepository vet at du»har oppdatert submodule»s depotet, og makeit bruker den nyeste forplikte seg i depotet av submodule. Fordi ifyou gjøre nye forplikter seg inne i en submodule, den viktigste depotet willstill peker til den gamle begå.,
Så, hvis du ønsker å ha disse endringene i din viktigste depotet også, youshould fortelle de viktigste depotet for å bruke den nyeste forplikte seg av thesubmodule. Nå hvordan gjør du dette?
Så du»ve gjort endringer i submodule»s depotet og forpliktet themin sin depotet. Hvis du nå gjøre en git status
i mainrepository, du vil se at submodule er i listen Changes not staged for commit
og det har tekst (modified content)
bak det.Dette betyr at koden til submodule er sjekket ut på adifferent begå enn de viktigste depotet peker til., Tomake de viktigste depotet peker til denne nye begå, du bare addthis endre med git add
og så begå, og skyv det.
å Holde submodules up-to-date
Hvis noen oppdatert en submodule, den andre team-medlemmer bør updatethe kode av deres submodules. Dette er ikke automatisk gjort avgit pull
, fordi med git pull
det bare henter informasjonen som submodule peker til anothercommit, men doesn»t oppdatere submodule»s kode., For å oppdatere thecode av din submodules, bør du kjøre:
Hva skjer hvis du don»t å kjøre denne kommandoen?
Hvis du don»t å kjøre denne kommandoen, koden din submodule er checkedout til en gammel begår. Når du gjør git status
vil du se thesubmodule i Changes not staged for commit
liste med tekst(modified content)
bak det. Dette er ikke fordi du endret thesubmodule»s koden, men fordi det er kode er sjekket ut til en differentcommit. Så Git ser dette som en endring, men er faktisk youjust didn»t oppdatere submodule»s kode., Så hvis du»re arbeider withsubmodules, don»t glem å holde submodules up-to-date.
Gjør det enklere for alle
noen ganger er Det irriterende hvis du glemmer å ta initiativ til og oppdatere yoursubmodules. Heldigvis finnes det noen triks for å gjøre det enklere:
Dette vil oppdatere submodules, og hvis de»re ikke startet ennå, willinitiate dem.
Du kan også ha submodules innsiden av submodules., I dette tilfellet»llwant å oppdatere/starte submodules undermapper:
Dette er mye å skrive, så du kan lage et alias:
Nå når du utfører git update
, det vil utføre en git pull
anda git submodule update --init --recursive
, og dermed oppdatere alle codein prosjektet.