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.2 no changes
-
2.51.1
2025-10-15
- 2.49.1 → 2.51.0 no changes
-
2.49.0
2025-03-14
- 2.48.1 → 2.48.2 no changes
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 no changes
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 no changes
-
2.46.0
2024-07-29
- 2.45.1 → 2.45.4 no changes
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 no changes
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 no changes
-
2.43.0
2023-11-20
- 2.41.1 → 2.42.4 no changes
-
2.41.0
2023-06-01
- 2.38.1 → 2.40.4 no changes
-
2.38.0
2022-10-02
- 2.36.1 → 2.37.7 no changes
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 no changes
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 no changes
-
2.32.0
2021-06-06
- 2.30.2 → 2.31.8 no changes
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 no changes
-
2.29.0
2020-10-19
- 2.28.1 no changes
-
2.28.0
2020-07-27
- 2.27.1 no changes
-
2.27.0
2020-06-01
- 2.25.1 → 2.26.3 no changes
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 no changes
-
2.23.0
2019-08-16
- 2.22.2 → 2.22.5 no changes
-
2.22.1
2019-08-11
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 no changes
-
2.21.0
2019-02-24
- 2.18.1 → 2.20.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 no changes
-
2.11.4
2017-09-22
- 2.10.5 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
- 2.4.12 → 2.6.7 no changes
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 no changes
-
2.0.5
2014-12-17
SYNOPSIS
gitclone[--template=<mall-katalog>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o<namn>] [-b<name>] [-u<upload-pack>] [--reference<förvar>] [--dissociate] [--separate-git-dir<git-kat>] [--depth<depth>] [--[no-]single-branch] [--[no-]tags] [--recurse-submodules[=<sökvägsspec>]] [--[no-]shallow-submodules] [--[no-]remote-submodules] [--jobs<n>] [--sparse] [--[no-]reject-shallow] [--filter=<filter-spec> [--also-filter-submodules]] [--] <förvar> [<katalog>]
BESKRIVNING
Klonar ett repo till en nyskapad katalog, skapar fjärrspårningsgrenar för varje gren i det klonade förvaret (synligt med git branch --remotes), och skapar och checkar ut en initial gren som förgrenas från det klonade förvarets för närvarande aktiva gren.
Efter klonen kommer en vanlig git fetch utan argument att uppdatera alla fjärrspårningsgrenar, och en git pull utan argument kommer dessutom att sammanfoga den fjärrstyrda huvudgrenen med den aktuella huvudgrenen, om någon (detta är inte sant när --single-branch anges; se nedan).
Denna standardkonfiguration uppnås genom att skapa referenser till fjärrgrenhuvudena under refs/remotes/origin och genom att initiera konfigurationsvariblerna remote.origin.url och remote.origin.fetch.
ALTERNATIV
-
-l -
--local -
När arkivet som ska klonas från finns på en lokal maskin, kringgår denna flagga den normala "Git aware" transportmekanismen och klonar arkivet genom att skapa en kopia av
HEADoch allt under objekt- och refs-katalogerna. Filerna under.git/objects/-katalogen är hårdlänkade för att spara utrymme när det är möjligt.Om repot anges som en lokal sökväg (t.ex. /sökväg/till/förvar) är detta standardinställningen, och
--localär i princip en no-op. Om arkivet anges som en URL ignoreras denna flagga (och vi använder aldrig de lokala optimeringarna). Att ange--no-localåsidosätter standardinställningen när /sökväg/till/förvar anges, och använder istället den vanliga Git-transporten.Om förvarets
$GIT_DIR/objectshar symboliska länkar eller är en symbolisk länk, kommer klonen att misslyckas. Detta är en säkerhetsåtgärd för att förhindra oavsiktlig kopiering av filer genom att avreferensera de symboliska länkarna.Av säkerhetsskäl fungerar det här alternativet inte med arkiv som ägs av andra användare, och
--no-localmåste anges för att klonen ska lyckas.OBS: den här operationen kan köras med samtidig modifiering av källkodsförrådet, ungefär som att köra
cp-r<src> <mål> medan <src> modifieras. -
--no-hardlinks -
Tvinga kloningsprocessen från ett förvar på ett lokalt filsystem att kopiera filerna under katalogen
.git/objectsistället för att använda hårda länkar. Detta kan vara önskvärt om du försöker göra en säkerhetskopia av ditt förvar. -
-s -
När förvaret som ska klonas finns på den lokala maskinen, istället för att använda hårda länkar, konfigureras
.git/objects/info/alternatesautomatiskt för att dela objekten med käll-repot. Det resulterande förvaret börjar utan något eget objekt.OBS: detta är en potentiellt farlig operation; använd den inte om du inte förstår vad den gör. Om du klonar ditt förvar med det här alternativet och sedan tar bort grenar (eller använder något annat Git-kommando som gör att en befintlig incheckning blir orefererad) i källförrådet, kan vissa objekt bli orefererade (eller hänga kvar). Dessa objekt kan tas bort med vanliga Git-operationer (som
gitcommit) som automatiskt anropargitmaintenancerun--auto. (Se git-maintenance[1].) Om dessa objekt tas bort och refererades till av det klonade förvaret, kommer det klonade förvaret att bli korrupt.Observera att om man kör
gitrepackutan--local-alternativet i ett förvar klonat med--shared, kopieras objekt från källrepositoriet till ett pack i det klonade förvaret, vilket tar bort diskutrymmesbesparingarna frånclone--shared. Det är dock säkert att köragitgc, som använder--local-alternativet som standard.Om du vill bryta beroendet mellan ett förvar som klonats med
--sharedoch dess käll-förvar kan du helt enkelt köragitrepack-aför att kopiera alla objekt från käll-förvaret till ett pack i det klonade förvaret. -
--reference[-if-able] <förvar> -
Om referensen <förvar> finns på den lokala maskinen, konfigurera automatiskt
.git/objects/info/alternatesför att hämta objekt från referensen <förvar>. Att använda ett redan befintligt förvar som ett alternativ kräver att färre objekt kopieras från förvar som klonas, vilket minskar nätverks- och lokallagringskostnader. När--reference-if-ableanvänds hoppas en icke-befintlig katalog över med en varning istället för att klonningen avbryts.OBS: se OBS för alternativet
--sharedoch även alternativet--dissociate. -
--dissociate -
Låna objekten från referens-förvar som anges med
--reference-alternativen endast för att minska nätverksöverföring, och stoppa lån från dem efter att en klon har gjorts genom att göra nödvändiga lokala kopior av lånade objekt. Det här alternativet kan också användas vid kloning lokalt från ett förvar som redan lånar objekt från ett annat förvar – det nya arkivet kommer att låna objekt från samma förvar, och det här alternativet kan användas för att stoppa lånet. -
-q -
--quiet -
Arbeta tyst. Förloppet rapporteras inte till standardfelströmmen.
-
-v -
--verbose -
Kör utförligt. Påverkar inte rapporteringen av förloppsstatus till standardfelströmmen.
-
--progress -
Förloppsstatus rapporteras som standard i standardfelströmmen när den är kopplad till en terminal, såvida inte
--quietanges. Denna flagga tvingar fram förloppsstatus även om standardfelströmmen inte dirigeras till en terminal. -
--server-option=<alternativ> -
Skicka den givna strängen till servern vid kommunikation med protokollversion 2. Den givna strängen får inte innehålla tecknet NUL eller LF. Serverns hantering av serveralternativ, inklusive okända, är serverspecifik. När flera
--server-option=<alternativ> anges skickas de alla till den andra sidan i den ordning som anges på kommandoraden. När ingen--server-option=<alternativ> anges från kommandoraden används istället värdena för konfigurationsvariabelnremote.<namn>.serverOption. -
-n -
--no-checkout -
Ingen utcheckning av
HEADutförs efter att klonen är klar. -
--[no-]reject-shallow -
Misslyckas om käll-förvaret är ett ytligt förråd. Konfigurationsvariabeln
clone.rejectShallowkan användas för att ange standardvärdet. -
--bare -
Skapa ett bart Git-arkiv. Det vill säga, istället för att skapa <katalog> och placera administrationsfilerna i <katalog>
/.git, gör själva <katalog> till$GIT_DIR. Detta innebär uppenbarligen--no-checkouteftersom det inte finns någonstans att checka ut i arbetskatalogen. Dessutom kopieras grenhuvudena på fjärrdatorn direkt till motsvarande lokala grenhuvuden, utan att mappa dem tillrefs/remotes/origin/. När detta alternativ används skapas varken fjärrspårningsgrenar eller relaterade konfigurationsvariabler. -
--sparse -
Använd en sparse-checkout, där endast filer i den översta katalogen initialt finns. Kommandot git-sparse-checkout[1] kan användas för att utöka arbetskatalogen efter behov.
-
--filter=<filter-spec> -
Använd funktionen för partiell kloning och begär att servern skickar en delmängd av nåbara objekt enligt ett givet objektfilter. När du använder
--filteranvänds den angivna <filter-spec> för det partiella klonfiltret. Till exempel kommer--filter=blob:noneatt filtrera bort alla blobbar (filinnehåll) tills de behövs av Git. Dessutom kommer--filter=blob:limit=<storlek> att filtrera bort alla blobbar med en storlek på minst <storlek>. För mer information om filterspecifikationer, se alternativet--filteri git-rev-list[1]. -
--also-filter-submodules -
Använd även partiell klonfiltret på alla undermoduler i förvaret. Kräver
--filteroch--recurse-submodules. Detta kan aktiveras som standard genom att ställa in konfigurationsalternativetclone.filterSubmodules. -
--mirror -
Ställ in en spegel av käll-förvaret. Detta innebär
--bare. Jämfört med--baremappar--mirrorinte bara lokala grenar av källan till lokala grenar av målet, det mappar också alla referenser (inklusive fjärrspårningsgrenar, anteckningar etc.) och ställer in en refspec-konfiguration så att alla dessa referenser skrivs över av engitremoteupdatei mål-förvaret. -
-o<namn> -
--origin<namn> -
Istället för att använda fjärrnamnet
originför att hålla reda på uppströms-förvaret, använd <namn>. Åsidosätterclone.defaultRemoteNamefrån konfigurationsfilen. -
-b<namn> -
--branch<namn> -
Istället för att peka den nyskapade
HEADtill grenen som pekas på av det klonade arkivetsHEAD, peka istället på <namn> grenen. I ett icke-bart arkiv är det detta grenen som kommer att checkas ut.--branchkan också ta taggar och kopplar bortHEADvid den incheckningen i det resulterande arkivet. -
--revision=<rev> -
Skapa ett nytt förvar och hämta historiken som leder till den givna revisionen <rev> (och inget annat), utan att skapa någon fjärrspårningsgren och utan att skapa någon lokal gren, och koppla bort
HEADtill <rev>. Argumentet kan vara ett referensnamn (t.ex.refs/heads/mainellerrefs/tags/v1.0) som skalar ner till en incheckning, eller ett hexadecimalt objektnamn. Detta alternativ är inkompatibelt med--branchoch--mirror. -
-u<upload-pack> -
--upload-pack<upload-pack> -
När detta anges, och förvaret att klona från nås via ssh, anger detta en icke-standardsökväg för kommandot som körs i den andra änden.
-
--template=<mallkatalog> -
Ange katalogen från vilken mallar ska användas; (Se avsnittet "MALLKATALOG" i git-init[1].)
-
-c<key>=<värde> -
--config<key>=<värde> -
Ställ in en konfigurationsvariabel i det nyskapade förvaret; denna träder i kraft omedelbart efter att förvaret har initierats, men innan fjärrhistoriken hämtas eller några filer checkas ut. <nyckeln> har samma format som förväntas av git-config[1] (t.ex.
core.eol=true). Om flera värden anges för samma nyckel kommer varje värde att skrivas till konfigurationsfilen. Detta gör det säkert att till exempel lägga till ytterligare hämtningsreferenser till den ursprungliga fjärrkontrollen.På grund av begränsningar i den nuvarande implementeringen, träder vissa konfigurationsvariabler inte i kraft förrän efter den initiala hämtningen och utcheckningen. Konfigurationsvariabler som är kända för att inte träda i kraft är:
remote.<namn>.mirrorochremote.<namn>.tagOpt. Använd motsvarande alternativ--mirroroch--no-tagsistället. -
--depth<djup> -
Skapa en "ytlig"-klon med en historik avkortad till det angivna antalet incheckningar. Implicerar
--single-branchom inte--no-single-branchanges för att hämta historikerna nära topparna på alla grenar. Om du vill klona submoduler ytligt, skicka även--shallow-submodules. -
--shallow-since=<datum> -
Skapa en ytlig klon med en historik efter den angivna tiden.
-
--shallow-exclude=<ref> -
Skapa en ytlig klon med en historik, som exkluderar incheckningar som kan nås från en specificerad fjärrgren eller tagg. Det här alternativet kan anges flera gånger.
-
--single-branch -
--no-single-branch -
Klona endast historiken som leder till toppen av en enskild gren, antingen angiven av
--branch-alternativet eller så pekar den primära grenens fjärrkontrollsHEADpå. Ytterligare hämtningar till det resulterande förvaret kommer endast att uppdatera fjärrspårningsgrenen för den gren som detta alternativ användes för den initiala kloningen. OmHEADpå fjärrkontrollen inte pekade på någon gren när--single-branch-klonen gjordes, skapas ingen fjärrspårningsgren. -
--tags -
--no-tags -
Styr om taggar ska klonas eller inte. När
--no-tagsanges blir alternativet permanent genom att ställa in konfigurationenremote.<fjärr>.tagOpt=--no-tags. Detta säkerställer att framtidagitpullochgitfetchinte följer några taggar. Efterföljande explicita tagghämtningar fungerar fortfarande (se git-fetch[1]).Som standard, klonas taggar och att skicka
--tagsär därför vanligtvis en no-op, såvida det inte upphäver ett tidigare--no-tags.Kan användas tillsammans med
--single-branchför att klona och underhålla en gren utan några referenser annat än en enda klonad gren. Detta är användbart t.ex. för att underhålla minimala kloner av standardgrenen i ett förvar för sökindexering. -
--recurse-submodules[=<sökvägsspec>] -
Efter att klonen har skapats, initiera och klona delmoduler inom baserat på den angivna <sökvägsspecen>. Om ingen
=<sökvägsspec> anges, initieras och klonas alla delmoduler. Detta alternativ kan ges flera gånger för sökvägsspecar som består av flera poster. Den resulterande klonen harsubmodule.activesatt till den angivna sökvägsspecen, eller "." (vilket betyder alla delmoduler) om ingen sökvägsspec anges.Submoduler initieras och klonas med sina standardinställningar. Detta motsvarar att köra
gitsubmoduleupdate--init--recursive<sökvägsspec> omedelbart efter att kloningen är klar. Detta alternativ ignoreras om det klonade arkivet inte har ett arbetsträd/checkout (dvs. om något av--no-checkout/-n,--bareeller--mirroranges) -
--shallow-submodules -
--no-shallow-submodules -
Alla undermoduler som klonas kommer att vara grunda med ett djup på 1.
-
--remote-submodules -
--no-remote-submodules -
All submodules which are cloned will use the status of the submodule’s remote-tracking branch to update the submodule, rather than the superproject’s recorded SHA-1. Equivalent to passing
--remotetogitsubmoduleupdate. -
--separate-git-dir=<git-kat> -
Istället för att placera det klonade förvaret där det ska vara, placera det klonade förvaret i den angivna katalogen och skapa sedan en filsystemsoberoende symbolisk Git-länk dit. Resultatet blir att Git-förvaret kan separeras från arbetskatalog.
-
--ref-format=<ref-format> -
Ange det angivna referenslagringsformatet för förvaret. Giltiga värden är:
-
filesför lösa filer med packade referenser. Detta är standardinställningen. -
reftableför reftable-formatet. Detta format är experimentellt och dess interna funktioner kan komma att ändras.
-
-
-j<n> -
--jobs<n> -
Antalet undermoduler som hämtas samtidigt. Standardvärdet är
submodule.fetchJobs. - <förvar>
-
Det (möjligen fjärr-) <förvar> att klona från. Se avsnittet GIT URLS nedan för mer information om hur du anger förvar.
- <katalog>
-
Namnet på en ny katalog att klona till. Den "humanistiska" delen av käll-förvarer används om ingen <katalog> uttryckligen anges (förvar för /sökväg/till/förvar.git och
fooförhost.xz:foo/.git). Kloning till en befintlig katalog är endast tillåten om katalogen är tom. -
--bundle-uri=<uri> -
Innan du hämtar från fjärren, hämta ett paket från den givna <uri> och upplösa informationen till det lokala förvaret. Referenserna i paketet kommer att lagras under det dolda namnutrymmet
refs/bundle/*. Detta alternativ är inkompatibelt med--depth,--shallow-sinceoch--shallow-exclude.
GIT URLS
I allmänhet innehåller URL:er information om transportprotokollet, adressen till fjärrservern och sökvägen till förvar. Beroende på transportprotokollet kan en del av denna information saknas.
Git stöder ssh-, git-, http- och https-protokollen (dessutom kan ftp och ftps användas för hämtning, men detta är ineffektivt och föråldrat; använd dem inte).
Den inbyggda transporten (dvs. git:// URL) utför ingen autentisering och bör användas med försiktighet på osäkra nätverk.
Följande syntaxer kan användas med dem:
-
ssh://[<användare>@]<värd>[:<port>]/<sökväg-till-git-förvar> -
git://<värd>[:<port>]/<sökväg-till-git-förvar> -
http[s]://<värd>[:<port>]/<sökväg-till-git-förvar> -
ftp[s]://<värd>[:<port>]/<sökväg-till-git-förvar>
En alternativ scp-liknande syntax kan också användas med ssh-protokollet:
-
[<användare>
@]<värd>:/<sökväg-till-git-förvar>
Denna syntax känns bara igen om det inte finns några snedstreck före det första kolonet. Detta hjälper till att skilja en lokal sökväg som innehåller ett kolon. Till exempel kan den lokala sökvägen foo:bar anges som en absolut sökväg eller ./foo:bar för att undvika att misstolkas som en ssh-url.
Protokollen ssh och git stöder dessutom ~<username>-expansionen:
-
ssh://[<användare>@]<värd>[:<port>]/~<användare>/<sökväg-till-git-förvar> -
git://[<användare>@]<värd>[:<port>]/<sökväg-till-git-förvar> -
[<användare>
@]<värd>[:<port>]/<sökväg-till-git-förvar>
För lokala förvar, som också stöds nativt av Git, kan följande syntaxer användas:
-
/sokvag/till/förvar.git/
-
file:///sokvag/till/förvar.git/
Dessa två syntaxer är mestadels likvärdiga, förutom att den förra innebär alternativet --local.
git clone, git fetch och git pull, men inte git push, accepterar också en lämplig bundle-fil. Se git-bundle[1].
När Git inte vet hur ett visst transportprotokoll ska hanteras, försöker det använda fjärr-hjälparen remote-<transport>, om en sådan finns. För att explicit begära en fjärr-hjälpare kan följande syntax användas:
-
<transport>
::<adress>
där <adress> kan vara en sökväg, en server och sökväg, eller en godtycklig URL-liknande sträng som känns igen av den specifika fjärrhjälparen som anropas. Se gitremote-helpers[7] för mer information.
Om det finns ett stort antal fjärrdatabaser med liknande namn och du vill använda ett annat format för dem (så att de URL:er du använder skrivs om till URL:er som fungerar), kan du skapa en konfigurationssektion i formatet:
[url "<faktisk-url-bas>"] insteadOf = <annan-url-bas>
Till exempel med detta:
[url "git://git.host.xz/"] insteadOf = host.xz:/sokvag/till/ insteadOf = arbete:
En URL som "arbete:förvar.git" eller "host.xz:/sokvag/till/förvar.git" kommer att skrivas om i alla sammanhang som antar att URL:en är "git://git.host.xz/förvar.git".
Om du vill skriva om URL:er enbart för sändning (push), kan du skapa en konfigurationssektion i formen:
[url "<faktisk-url-bas>"] pushInsteadOf = <annan-url-bas>
Till exempel med detta:
[url "ssh://example.org/"] pushInsteadOf = git://example.org/
En URL som "git://example.org/path/to/repo.git" kommer att skrivas om till "ssh://example.org/path/to/repo.git" för sändning ("pushas"), men pulls kommer fortfarande att använda den ursprungliga URL:en.
EXEMPEL
-
Klona från uppströms:
$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux $ cd my-linux $ make
-
Skapa en lokal klon som lånar från den aktuella katalogen, utan att kontrollera saker:
$ git clone -l -s -n . ../kopia $ cd ../kopia $ git show-branch
-
Klona från uppströms vid lån från en befintlig lokal katalog:
$ git clone --reference /git/linux.git \ git://git.kernel.org/pub/scm/.../linux.git \ my-linux $ cd my-linux
-
Skapa ett bart förvar för att publicera dina ändringar offentligt:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git
-
Klona ett lokalt förvar från en annan användare:
$ git clone --no-local /home/annananv/proj.git /pub/scm/proj.git
KONFIGURATION
Allt under den här raden i det här avsnittet är selektivt inkluderat från dokumentationen git-config[1]. Innehållet är detsamma som det som finns där:
-
init.templateDir -
Ange katalogen från vilken mallarna ska kopieras. (See the "TEMPLATE DIRECTORY" section of git-init[1].)
-
init.defaultBranch -
Tillåter att åsidosätta standardgrennamnet, t.ex. vid initialisering av ett nytt förvar.
-
init.defaultObjectFormat -
Tillåter att åsidosätta standardobjektformatet för nya arkiv. Se
--object-format=i git-init[1]. Både kommandoradsalternativet och miljövariabelnGIT_DEFAULT_HASHhar företräde framför denna konfiguration. -
init.defaultRefFormat -
Tillåter åsidosättning av standardformatet för referenslagring för nya arkiv. Se
--ref-format=i git-init[1]. Både kommandoradsalternativet och miljövariabelnGIT_DEFAULT_REF_FORMAThar företräde framför denna konfiguration.
-
clone.defaultRemoteName -
Namnet på den fjärren som ska skapas vid kloning av ett arkiv. Standardvärdet är
origin. Det kan åsidosättas genom att använda kommandoradsalternativet--origin. -
clone.rejectShallow -
Avvisa kloning av ett förvar om det är ett ytligt sådant; detta kan åsidosättas genom att skicka alternativet
--reject-shallowpå kommandoraden. -
clone.filterSubmodules -
Om ett partiellt klonfilter tillhandahålls (se
--filteri git-rev-list[1]) och--recurse-submodulesanvänds, använd även filtret på undermoduler.
GIT
En del av git[1]-sviten