gitaarik/git_submodules.md (Norsk)

0 Comments

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.


Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *