Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.53.0 no changes
-
2.52.0
2025-11-17
- 2.51.1 → 2.51.2 no changes
-
2.51.0
2025-08-18
- 2.47.1 → 2.50.1 no changes
-
2.47.0
2024-10-06
- 2.44.1 → 2.46.4 no changes
-
2.44.0
2024-02-23
- 2.42.1 → 2.43.7 no changes
-
2.42.0
2023-08-21
- 2.36.1 → 2.41.3 no changes
-
2.36.0
2022-04-18
- 2.28.1 → 2.35.8 no changes
-
2.28.0
2020-07-27
- 2.26.1 → 2.27.1 no changes
-
2.26.0
2020-03-22
- 2.25.2 → 2.25.5 no changes
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 no changes
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 no changes
-
2.22.0
2019-06-07
- 2.19.1 → 2.21.4 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
- 2.15.4 no changes
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
- 2.11.4 no changes
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 no changes
-
2.6.7
2017-05-05
- 2.5.6 no changes
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
SYNOPSIS
git submodule [--quiet] [--cached]
git submodule [--quiet] add [<flaggor>] [--] <förvar> [<sökväg>]
git submodule [--quiet] status [--cached] [--recursive] [--] [<sökväg>…]
git submodule [--quiet] init [--] [<sökväg>…]
git submodule [--quiet] deinit [-f|--force] (--all|[--] <sökväg>…)
git submodule [--quiet] update [<flaggor>] [--] [<sökväg>…]
git submodule [--quiet] set-branch [<flaggor>] [--] <sökväg>
git submodule [--quiet] set-url [--] <sökväg> <nyurl>
git submodule [--quiet] summary [<flaggor>] [--] [<sökväg>…]
git submodule [--quiet] foreach [--recursive] <kommando>
git submodule [--quiet] sync [--recursive] [--] [<sökväg>…]
git submodule [--quiet] absorbgitdirs [--] [<sökväg>…]
BESKRIVNING
Inspekterar, uppdaterar och hanterar undermoduler.
För mer information om undermoduler, se gitsubmodules[7].
KOMMANDON
Utan argument visas statusen för befintliga undermoduler. Flera underkommandon är tillgängliga för att utföra operationer på undermodulerna.
- add [-b <gren>] [-f|--force] [--name <namn>] [--reference <förvar>] [--ref-format <format>] [--depth <djup>] [--] <förvar> [<sökväg>]
-
Lägg till det givna förvaret som en undermodul vid den givna sökvägen till ändringsmängden som ska checkas-in bredvid det aktuella projektet: det aktuella projektet kallas "superprojektet".
<förvar> är URL:en till den nya undermodulens ursprungs-förvar. Detta kan antingen vara en absolut URL, eller (om den börjar med ./ eller ../), platsen i förhållande till superprojektets standardfjärrrepository (Observera att för att ange ett förvar foo.git som ligger precis bredvid ett superprojekt bar.git måste du använda
../foo.gitistället för./foo.git- som man kan förvänta sig när man följer reglerna för relativa URL:er - eftersom utvärderingen av relativa URL:er i Git är identisk med den för relativa kataloger).Standardfjärren är fjärr för fjärrspårningsgrenen i den aktuella grenen. Om ingen sådan fjärrspårningsgren finns eller om HEAD är bortkopplad antas "origin" vara standardfjärren. Om superprojektet inte har en konfigurerad standardfjärr är superprojektet sin egen auktoritativa uppströms och den aktuella arbetskatalogen används istället.
Det valfria argumentet <sökväg> är den relativa platsen för den klonade delmodulen att existera i superprojektet. Om <sökväg> inte anges används den kanoniska delen av källförrådet ("repo" för "/path/to/repo.git" och "foo" för "host.xz:foo/.git"). Om <path> finns och redan är ett giltigt Git-förråd, köas det för incheckning utan kloning. <sökväg> används också som delmodulens logiska namn i dess konfigurationsposter om inte
--nameanvänds för att ange ett logiskt namn.Den angivna URL:en registreras i
.gitmodulesför användning av efterföljande användare som klonar superprojektet. Om URL:en anges relativ till superprojektets förvar, antas det att superprojektets och undermodulens förvar kommer att hållas tillsammans på samma relativa plats, och endast superprojektets URL behöver anges. git-submodule kommer att korrekt lokalisera undermodulen med hjälp av den relativa URL:en i.gitmodules.Om
--ref-format<format> anges, kommer referenslagringsformatet för nyligen klonade undermoduler att ställas in därefter. - status [--cached] [--recursive] [--] [<sökväg>…]
-
Visar statusen för undermodulerna. Detta skriv ut SHA-1 för den för närvarande utcheckade incheckning för varje undermodul, tillsammans med sökvägen till undermodulen och utdata från git describe för SHA-1. Varje SHA-1 kommer eventuellt att ha prefixet
-om undermodulen inte är initierad,+om den för närvarande utcheckade undermoduls-incheckning inte matchar SHA-1 som finns i indexet för det innehållande förvar ochUom undermodulen har sammanslagningskonflikter.Om
--cachedanges kommer detta kommando istället att skriva ut SHA-1 som är registrerad i superprojektet för varje undermodul.Om
--recursiveanges kommer detta kommando att rekursiva till kapslade undermoduler och även visa deras status.Om du bara är intresserad av ändringar av de för närvarande initialiserade undermodulerna med avseende på incheckning som är registrerad i indexet eller HEAD, kommer git-status[1] och git-diff[1] också att tillhandahålla den informationen (och kan också rapportera ändringar i en undermoduls arbetsträd).
- init [--] [<sökväg>…]
-
Initiera de undermoduler som är registrerade i indexet (som lades till och checkas-in någon annanstans) genom att sätta
submodule.$name.urli.git/config, med samma inställning från.gitmodulessom mall. Om URL:en är relativ kommer den att lösas med hjälp av standardfjärren. Om det inte finns någon standardfjärr antas det aktuella arkivet vara uppströms.Valfria <sökväg>-argument begränsar vilka undermoduler som ska initieras. Om ingen sökväg anges och submodule.active har konfigurerats, kommer undermoduler som konfigurerats att vara aktiva att initieras, annars initieras alla undermoduler.
It will also copy the value of
submodule.$name.update, if present in the.gitmodulesfile, to.git/config, but (1) this command does not alter existing information in.git/config, and (2)submodule.$name.updatethat is set to a custom command is not copied for security reasons.Du kan sedan anpassa URL:erna för klonen av undermodulerna i
.git/configför din lokala installation och fortsätta tillgitsubmoduleupdate; du kan också bara användagitsubmoduleupdate--initutan det explicita steget init om du inte avser att anpassa några undermodulplatser.Se underkommandot add för definitionen av standardfjärr.
- deinit [-f|--force] (--all|[--] <sökväg>…)
-
Avregistrera de givna undermodulerna, d.v.s. ta bort hela
submodule.$name-sektionen från .git/config tillsammans med deras arbetsträd. Ytterligare anrop tillgitsubmoduleupdate,gitsubmoduleforeachochgitsubmodulesynckommer att hoppa över alla oregistrerade undermoduler tills de initialiseras igen, så använd det här kommandot om du inte längre vill ha en lokal utcheckning av undermodulen i ditt arbetsträd.När kommandot körs utan sökvägsspec, ger det fel, istället för att avinitiera allt, för att förhindra misstag.
Om
--forceanges kommer undermodulens arbetskatalog att tas bort även om det innehåller lokala modifieringar.Om du verkligen vill ta bort en undermodul från förvaret och checka-in den, använd git-rm[1] istället. Se gitsubmodules[7] för borttagningsalternativ.
- update [--init] [--remote] [-N|--no-fetch] [--[no-]recommend-shallow] [-f|--force] [--checkout|--rebase|--merge] [--reference <förvar>] [--ref-format <format>] [--depth <djup>] [--recursive] [--jobs <n>] [--[no-]single-branch] [--filter <filter-spec>] [--] [<sökväg>…]
-
Uppdatera de registrerade undermodulerna så att de matchar vad superprojektet förväntar sig genom att klona saknade undermoduler, hämta saknade incheckningar i undermoduler och uppdatera arbetskatalog för undermodulerna. "Uppdateringen" kan göras på flera sätt beroende på kommandoradsalternativ och värdet på konfigurationsvariabeln
submodule.<namn>.update. Kommandoradsalternativet har företräde framför konfigurationsvariabeln. Om ingetdera anges utförs en "utcheckning". (obs: vad som finns i.gitmodules-filen är irrelevant i detta läge; segitsubmoduleinitovan för hur.gitmodulesanvänds). "Uppdaterings"-procedurerna som stöds både från kommandoraden och genom konfigurationensubmodule.<namn>.updateär:- checkout
-
incheckningen som registrerats i superprojektet kommer att checkas ut i undermodulen på en fristående HEAD.
Om
--forceanges kommer undermodulen att checkas ut (medgitcheckout--force), även om incheckningeb som anges i indexet för det innehållande arkivet redan matchar incheckningen som checkats ut i undermodulen. - rebase
-
Den nuvarande grenen av undermodulen kommer att ombaseras på den incheckning som registrerats i superprojektet.
- merge
-
Incheckningen som registrerats i superprojektet kommer att slås samman med den aktuella grenen i undermodulen.
Följande uppdateringsprocedurer har ytterligare begränsningar:
- anpassat kommando
-
mekanism för att köra godtyckliga kommandon med commit-ID som argument. Mer specifikt, om konfigurationsvariabeln
submodule.<namn>.updateär satt till!customcommand, läggs objektnamnet för incheckning som registrerats i superprojektet för undermodulen till icustomcommand-strängen och körs. Observera att denna mekanism inte stöds i.gitmodules-filen eller på kommandoraden. - none
-
Undermodulen uppdateras inte. Denna uppdateringsprocedur är inte tillåten på kommandoraden.
Om undermodulen inte har initierats än, och du bara vill använda inställningen som den lagras i
.gitmodules, kan du automatiskt initiera undermodulen med alternativet--init.Om
--recursiveanges, kommer detta kommando att använda rekursivt inträde i de registrerade undermodulerna och uppdatera eventuella kapslade undermoduler inuti.Om
--ref-format<format> anges, kommer referenslagringsformatet för nyligen klonade undermoduler att ställas in därefter.Om
--filter<filter-spec> anges, kommer det givna partiella klon-filtret att tillämpas på undermodulen. Se git-rev-list[1] för detaljer om filterspecifikationer. - set-branch (-b|--branch) <gren> [--] <sökväg>
- set-branch (-d|--default) [--] <<sökväg>
-
Ställer in standardgrenen för fjärrspårning för undermodulen. Alternativet
--branchgör att fjärrgrenen kan specificeras. Alternativet--defaulttar bort konfigurationsnyckeln submodule.<namn>.branch, vilket gör att spårningsgrenen som standard anges till fjärrgrenen HEAD. - set-url [--] <sökväg> <nyurl>
-
Ställer in URL:en för den angivna undermodulen till <nyurl>. Sedan synkroniseras undermodulens nya fjärr-URL-konfiguration automatiskt.
- summary [--cached|--files] [(-n|--summary-limit) <n>] [incheckning] [--] [<sökväg>…]
-
Visa inchecknings-sammanfattning mellan den givna incheckningen (standard är HEAD) och arbetsträd/index. För en aktuell undermodul visas en serie incheckningar i undermodulen mellan den givna superprojekt-incheckningen och indexet eller arbetskatalog (växlat med
--cached). Om alternativet--filesanges, visas serien av incheckningar i undermodulen mellan superprojektets index och undermodulens arbetskatalog (det här alternativet tillåter inte användning av alternativet--cachedeller att tillhandahålla en explicit incheckning).Att använda alternativet
--submodule=logmed git-diff[1] kommer också att ge den informationen. - foreach [--recursive] <<kommando>
-
Utvärderar ett godtyckligt skalkommando i varje utcheckad undermodul. Kommandot har åtkomst till variablerna $name, $sm_path, $displaypath, $sha1 och $toplevel: $name är namnet på den relevanta undermodulsektionen i
.gitmodules, $sm_path är sökvägen till undermodulen som registrerats i det omedelbara superprojektet, $displaypath innehåller den relativa sökvägen från den aktuella arbetskatalogen till undermodulernas rotkatalog, $sha1 är incheckning som registrerats i det omedelbara superprojektet, och $toplevel är den absoluta sökvägen till den översta nivån av det omedelbara superprojektet. Observera att för att undvika konflikter med $PATH i Windows är variabeln $path nu en föråldrad synonym till variabeln $sm_path. Alla undermoduler som definierats i superprojektet men inte utcheckats ignoreras av detta kommando. Om inte--quietär angivet, skriver foreach ut namnet på varje undermodul innan kommandot utvärderas. Om--recursiveanges, passeras undermoduler rekursivt (dvs. det givna shellkommandot utvärderas även i kapslade undermoduler). En retur som inte är noll från kommandot i någon undermodul gör att bearbetningen avslutas. Detta kan åsidosättas genom att lägga till || : i slutet av kommandot.Som ett exempel, visar kommandot nedan sökvägen och den för närvarande utcheckade incheckning för varje undermodul:
git-submodul för varje 'echo $sm_path `git rev-parse HEAD`'
- sync [--recursive] [--] [<sökväg>…]
-
Synkroniserar undermodulers konfigurationsinställning för fjärr-URL till värdet som anges i
.gitmodules. Det påverkar endast de undermoduler som redan har en URL-post i .git/config (det är fallet när de initieras eller nyligen läggs till). Detta är användbart när undermodulers URL:er ändras uppströms och du behöver uppdatera dina lokala arkiv i enlighet därmed.gitsubmodulesyncsynkroniserar alla undermoduler medangitsubmodulesync--Aendast synkroniserar undermodul "A".Om
--recursiveanges, kommer detta kommando att använda rekursivt inträde i de registrerade undermodulerna och synkronisera eventuella kapslade undermoduler inuti. - absorbgitdirs
-
Om en git-katalog för en undermodul finns inuti undermodulen, flytta git-katalogen för undermodulen till dess superprojekts sökväg
$GIT_DIR/modulesoch anslut sedan git-katalogen och dess arbetskatalog genom att ställa incore.worktreeoch lägga till en .git-fil som pekar på git-katalogen inbäddad i superprojects git-katalog.Ett förvar som klonades oberoende och senare lades till som en undermodul eller gamla inställningar har git-katalogen för submodules inuti undermodulen istället för inbäddad i git-katalogen för superprojects.
Det här kommandot är rekursivt som standard.
ALTERNATIV
- -q
- --quiet
-
Skriv bara ut felmeddelanden.
- --progress
-
Det här alternativet är endast giltigt för kommandona "add" och "update". Förloppsstatus rapporteras som standard i standardfelströmmen när den är kopplad till en terminal, såvida inte -q anges. Denna flagga tvingar fram förloppsstatus även om standardfelströmmen inte dirigeras till en terminal.
- --all
-
Det här alternativet är endast giltigt för deinit-kommandot. Avregistrera alla undermoduler i arbetskatalog.
- -b <gren>
- --branch <gren>
-
Gren till förvaret som ska läggas till som undermodul. Namnet på grenen registreras som
submodule.<namn>.branchi.gitmodulesförupdate--remote. Ett specialvärde på.används för att indikera att namnet på grenen i undermodulen ska vara samma namn som den aktuella grenen i det aktuella förvaret. Om alternativet inte anges används standardvärdet HEAD som fjärrnamn. - -f
- --force
-
Det här alternativet är endast giltigt för kommandona add, deinit och update. När du kör add, tillåts tillägg av en annars ignorerad sökväg för en undermodul. Det här alternativet används också för att kringgå en kontroll av att undermodulens namn inte redan används. Som standard kommer git submodule add att misslyckas om det föreslagna namnet (som härleds från sökvägen) redan är registrerat för en annan undermodul i förvaret. Genom att använda --force kan kommandot fortsätta genom att automatiskt generera ett unikt namn genom att lägga till ett nummer till det motstridiga namnet (t.ex. om en undermodul med namnet child finns, kommer den att försöka child1, och så vidare). När du kör deinit kommer undermodulens arbetskatalog att tas bort även om de innehåller lokala ändringar. När du kör update (endast effektivt med utcheckningsproceduren), kasta bort lokala ändringar i undermoduler när du byter till en annan incheckning; och kör alltid en utcheckningsoperation i undermodulen, även om commiten som listas i indexet för det innehållande arkivet matchar den incheckning som checkats ut i undermodulen.
- --cached
-
Det här alternativet gäller endast för status- och sammanfattnings-kommandon. Dessa kommandon använder vanligtvis incheckning som finns i undermodulen HEAD, men med det här alternativet, används istället incheckning som lagras i indexet.
- --files
-
Det här alternativet är endast giltigt för kommandot summary. Kommandot jämför incheckningen i indexet med den i undermodulen HEAD när det här alternativet används.
- -n
- --summary-limit
-
Det här alternativet gäller endast för kommandot summary. Begränsa storleken på sammanfattningen (antalet incheckninger som visas totalt). Om du anger 0 inaktiveras sammanfattningen; ett negativt tal betyder obegränsat (standard). Denna gräns gäller endast modifierade undermoduler. Storleken är alltid begränsad till 1 för tillagda/borttagna/typändrade undermoduler.
- --remote
-
Det här alternativet är endast giltigt för kommandot update. Istället för att använda superprojektets registrerade SHA-1 för att uppdatera undermodulen, använd statusen för undermodulens fjärrspårningsgren. Fjärrgrenen som används är grenens fjärr (
branch.<namn>.remote), med standardinställningenorigin. Fjärrgrenen som används har som standard fjärrenHEAD, men grennamnet kan åsidosättas genom att ställa in alternativetsubmodule.<namn>.branchi antingen.gitmoduleseller.git/config(med.git/configprioriterat).This works for any of the supported update procedures (
--checkout,--rebase, etc.). The only change is the source of the target SHA-1. For example,submoduleupdate--remote--mergewill merge upstream submodule changes into the submodules, whilesubmoduleupdate--mergewill merge superproject gitlink changes into the submodules.För att säkerställa ett aktuellt spårningsgrentillstånd hämtar
update--remotesubmodulens fjärrförvar innan SHA-1 beräknas. Om du inte vill hämta bör du användasubmoduleupdate--remote--no-fetch.Use this option to integrate changes from the upstream subproject with your submodule’s current HEAD. Alternatively, you can run
gitpullfrom the submodule, which is equivalent except for the remote branch name:update--remoteuses the default upstream repository andsubmodule.<name>.branch, whilegitpulluses the submodule’sbranch.<name>.merge. Prefersubmodule.<name>.branchif you want to distribute the default upstream branch with the superproject andbranch.<name>.mergeif you want a more native feel while working in the submodule itself. - -N
- --no-fetch
-
Det här alternativet är endast giltigt för kommandot update. Hämta inte nya objekt från fjärrplatsen.
- --checkout
-
Det här alternativet är endast giltigt för kommandot update. Checka ut incheckningen som registrerats i superprojektet på en fristående HEAD i submodulen. Detta är standardbeteendet, det huvudsakliga syftet med det här alternativet är att åsidosätta
submodule.$name.updatenär det är satt till ett annat värde äncheckout. Om nyckelnsubmodule.$name.updateantingen inte är explicit angiven eller är satt tillcheckout, är det här alternativet implicit. - --merge
-
Det här alternativet är endast giltigt för kommandot update. Sammanfoga incheckningen som registrerats in i superprojektet till den aktuella grenen av undermodulen. Om det här alternativet anges kommer undermodulens HEAD inte att kopplas bort. Om ett sammanfogningsfel förhindrar denna process måste du lösa de resulterande konflikterna inom undermodulen med vanliga konfliktlösningsverktyg. Om nyckeln
submodule.$name.updateär satt tillmergeär det här alternativet implicit. - --rebase
-
Det här alternativet är endast giltigt för kommandot update. Ombasera den aktuella grenen till incheckningen som registrerats i superprojektet. Om det här alternativet anges kommer undermodulens HEAD inte att kopplas bort. Om ett merge-fel förhindrar denna process måste du lösa dessa fel med git-rebase[1]. Om nyckeln
submodule.$name.updateär satt tillrebaseär det här alternativet implicit. - --init
-
Det här alternativet är endast giltigt för kommandot update. Initiera alla undermoduler för vilka "git submodule init" inte har anropats hittills innan uppdatering.
- --name
-
Det här alternativet är endast giltigt för kommandot add. Det ställer in undermodulens namn till den angivna strängen istället för att som standard använda dess sökväg. Namnet måste vara giltigt som katalognamn och får inte sluta med ett /.
- --reference <förvar>
-
Det här alternativet är endast giltigt för kommandona add och update. Dessa kommandon behöver ibland klona ett fjärrförvar I det här fallet, skickas det här alternativet till kommandot git-clone[1].
NOTE: Do not use this option unless you have read the note for git-clone[1]'s
--reference,--shared, and--dissociateoptions carefully. - --dissociate
-
Det här alternativet är endast giltigt för kommandona add och update. Dessa kommandon behöver ibland klona ett fjärrförvar I det här fallet, skickas det här alternativet till kommandot git-clone[1].
OBS: se OBS för alternativet
--reference. - --recursive
-
Det här alternativet är endast giltigt för kommandona foreach, update, status och sync. Gå igenom undermoduler rekursivt. Operationen utförs inte bara i undermodulerna i det aktuella repot, utan även i alla kapslade undermoduler inuti dessa undermoduler (och så vidare).
- --depth
-
Det här alternativet är giltigt för kommandona add och update. Skapa en ytlig klon med en historik avkortad till det angivna antalet revisioner. Se git-clone[1]
- --recommend-shallow
- --no-recommend-shallow
-
Det här alternativet är endast giltigt för kommandot update. Den initiala klonen av en undermodul kommer att använda den rekommenderade
submodule.<namn>.shallowsom tillhandahålls av.gitmodules-filen som standard. För att ignorera förslagen, använd--no-recommend-shallow. - -j <n>
- --jobs <n>
-
Det här alternativet är endast giltigt för kommandot update. Klona nya undermoduler parallellt med lika många jobb. Standardinställningen är
submodule.fetchJobs. - --single-branch
- --no-single-branch
-
Det här alternativet är endast giltigt för kommandot update. Klona endast en gren under uppdatering: HEAD eller en som anges av --branch.
- <sökväg>…
-
Sökvägar till undermodul(er). När detta anges begränsas kommandot till att endast fungera på de undermoduler som finns vid de angivna sökvägarna. (Detta argument krävs med add).
FILER
Vid initialisering av undermoduler används en .gitmodules-fil i den översta katalogen i det innehållande förvaret för att hitta URL:en för varje undermodul. Denna fil ska formateras på samma sätt som $GIT_DIR/config. Nyckeln till varje undermoduls URL är "submodule.$name.url". Se gitmodules[5] för mer information.
GIT
En del av git[1]-sviten