?
This document uses PHP Chinese website manual Release
git-clone - 將存儲庫克隆到新目錄中
git clone [--template=<template_directory>] [-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror] [-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>] [--dissociate] [--separate-git-dir <git dir>] [--depth <depth>] [--[no-]single-branch] [--no-tags] [--recurse-submodules] [--[no-]shallow-submodules] [--jobs <n>] [--] <repository> [<directory>]
將存儲庫克隆到新創(chuàng)建的目錄中,為克隆存儲庫中的每個(gè)分支創(chuàng)建遠(yuǎn)程跟蹤分支(可見使用git branch -r
),并創(chuàng)建并簽出分支存儲庫當(dāng)前活動分支中分支的初始分支。
克隆之后,git fetch
沒有參數(shù)的平原將更新所有遠(yuǎn)程跟蹤分支,并且git pull
如果有的話,一個(gè)不帶參數(shù)的遠(yuǎn)程主分支將會合并到當(dāng)前主分支中(當(dāng)“--single-branch”為給出;見下文)。
這種默認(rèn)配置是通過創(chuàng)建對遠(yuǎn)程分支頭的引用refs/remotes/origin
以及通過初始化remote.origin.url
和remote.origin.fetch
配置變量來實(shí)現(xiàn)的。
--local -l
當(dāng)要克隆的存儲庫位于本地計(jì)算機(jī)上時(shí),此標(biāo)志繞過正常的“Git aware”傳輸機(jī)制,并通過復(fù)制 HEAD 和對象下的所有內(nèi)容并引用目錄來克隆存儲庫。.git/objects/
如果可能,目錄下的文件被硬鏈接以節(jié)省空間。
如果存儲庫被指定為本地路徑(例如,/path/to/repo
),這是默認(rèn)的,并且 -
local 本質(zhì)上是沒有操作的。如果存儲庫被指定為 URL,那么該標(biāo)志將被忽略(并且我們從不使用本地優(yōu)化)。指定--no-local
將在/path/to/repo
給定時(shí)重寫默認(rèn)值,而不是使用常規(guī) Git 傳輸。
--no-hardlinks
強(qiáng)制從本地文件系統(tǒng)的存儲庫復(fù)制進(jìn)程,以復(fù)制目錄下的.git/objects
文件而不是使用硬鏈接。如果您試圖對存儲庫進(jìn)行備份,這可能是可取的。
--shared -s
當(dāng)要克隆的存儲庫位于本地計(jì)算機(jī)上時(shí),將自動設(shè)置.git/objects/info/alternates
為與源存儲庫共享對象,而不是使用硬鏈接。生成的存儲庫首先沒有任何對象。
注意:這是一個(gè)可能危險(xiǎn)的操作;除非你了解它你不要使用它。如果您使用此選項(xiàng)克隆存儲庫,然后刪除源存儲庫中的分支(或使用任何其他Git命令使任何現(xiàn)有的未提交的提交未引用),則某些對象可能會變?yōu)槲匆茫ɑ驊覓欤?。這些對象可能被git commit
自動調(diào)用的普通 Git 操作(如)刪除git gc --auto
。(請參閱 git-gc [1]。)如果這些對象被刪除并被克隆存儲庫引用,則克隆的存儲庫將會損壞。
請注意,git repack
如果在-l
克隆的存儲庫中運(yùn)行時(shí)沒有選項(xiàng),-s
則會將源存儲庫中的對象復(fù)制到克隆存儲庫中的包中,從而節(jié)省磁盤空間clone -s
。但是,運(yùn)行是安全的,默認(rèn)情況下git gc
使用該-l
選項(xiàng)。
如果要打破克隆-s
在其源存儲庫中的存儲庫的依賴關(guān)系,可以簡單地運(yùn)行git repack -a
以將源存儲庫中的所有對象復(fù)制到克隆存儲庫中的包中。
--reference-if-able <repository>
如果參考存儲庫位于本地計(jì)算機(jī)上,則自動設(shè)置.git/objects/info/alternates
為從參考存儲庫獲取對象。將已經(jīng)存在的存儲庫用作備用存儲庫將需要從正在克隆的存儲庫中復(fù)制更少的對象,從而降低網(wǎng)絡(luò)和本地存儲成本。使用時(shí)--reference-if-able
,會跳過一個(gè)不存在的目錄,并顯示警告而不是中止克隆。
注意:請參閱--shared
選項(xiàng)的注釋,以及--dissociate
選項(xiàng)。
--dissociate
借助--reference
僅使用選項(xiàng)指定的引用存儲庫借用對象,以減少網(wǎng)絡(luò)傳輸,并通過制作所需的借用對象的本地副本,在克隆完成后停止借用它們。當(dāng)從已經(jīng)借用另一個(gè)存儲庫中的對象的存儲庫本地克隆時(shí),也可以使用此選項(xiàng) - 新存儲庫將借用同一存儲庫中的對象,并且此選項(xiàng)可用于停止借用。
--quiet -q
安靜地操作。進(jìn)度未報(bào)告給標(biāo)準(zhǔn)錯誤流。
--verbose -v
運(yùn)行詳細(xì)。不影響向標(biāo)準(zhǔn)錯誤流報(bào)告進(jìn)度狀態(tài)。
--progress
當(dāng)連接到終端時(shí),默認(rèn)情況下,標(biāo)準(zhǔn)錯誤流中會報(bào)告進(jìn)度狀態(tài),除非指定了-q。即使標(biāo)準(zhǔn)錯誤流未定向到終端,此標(biāo)志也會強(qiáng)制進(jìn)度狀態(tài)。
--no-checkout -n
克隆完成后,不執(zhí)行HEAD簽出。
--bare
制作一個(gè)bare
Git 存儲庫。也就是說,不是創(chuàng)建,<directory>
并把行政文件<directory>/.git
,使<directory>
本身$GIT_DIR
。這顯然意味著,-n
因?yàn)闆]有地方可以檢查工作樹。此外,遙控器上的分支頭直接復(fù)制到相應(yīng)的本地分支機(jī)構(gòu)頭上,而無需將其映射到refs/remotes/origin/
。使用此選項(xiàng)時(shí),不會創(chuàng)建遠(yuǎn)程跟蹤分支和相關(guān)配置變量。
--mirror
設(shè)置源存儲庫的鏡像。這意味著--bare
。相比--bare
,--mirror
不僅映射源到目標(biāo)的本地分支的地方分支,它映射所有參考文獻(xiàn)(包括遠(yuǎn)程跟蹤分支,筆記等),并設(shè)置了一個(gè)的
Refspec 構(gòu)造,使得所有這些參考文獻(xiàn)通過覆蓋git remote update
在目標(biāo)存儲庫。
--origin <name> -o <name>
不要使用遠(yuǎn)程名稱origin
來跟蹤上游存儲庫,請使用<name>
。
--branch <name> -b <name>
而不是將新創(chuàng)建的 HEAD 指向克隆存儲庫 HEAD 指向的<name>
分支,而是指向分支。在非裸倉庫中,這是將被檢出的分支。--branch
也可以在生成的存儲庫中提交標(biāo)簽并分離 HEAD。
--upload-pack <upload-pack> -u <upload-pack>
當(dāng)給定時(shí),通過 ssh 訪問要克隆的存儲庫,這為另一端運(yùn)行的命令指定了非默認(rèn)路徑。
--template=<template_directory>
指定將使用模板的目錄; (請參閱 git-init [1]的“TEMPLATE DIRECTORY”部分。)
--config <key>=<value> -c <key>=<value>
在新創(chuàng)建的存儲庫中設(shè)置配置變量; 這會在儲存庫初始化之后立即生效,但是在獲取遠(yuǎn)程歷史記錄或檢出任何文件之前。關(guān)鍵是與 git-config [1]預(yù)期的格式相同(例如,core.eol=true
)。如果為同一個(gè)鍵指定了多個(gè)值,則每個(gè)值都將寫入配置文件。例如,這可以安全地將其他提取參數(shù)添加到原始遠(yuǎn)程。
--depth <depth>
創(chuàng)建一個(gè)shallow
歷史截?cái)酁橹付〝?shù)目的提交的克隆。暗示--single-branch
除非--no-single-branch
給出所有分支的提示附近的歷史。如果你想要簡單地克隆子模塊,也可以通過--shallow-submodules
。
--shallow-since=<date>
在指定時(shí)間后創(chuàng)建一個(gè)具有歷史記錄的淺表克隆。
--shallow-exclude=<revision>
創(chuàng)建具有歷史記錄的淺層克隆,但不包括從指定遠(yuǎn)程分支或標(biāo)記可訪問的提交。該選項(xiàng)可以多次指定。
--no-single-branch
只克隆導(dǎo)致單個(gè)分支尖端的歷史記錄,無論是由--branch
選項(xiàng)指定還是主分支遠(yuǎn)程的HEAD
指向。進(jìn)一步提取到生成的存儲庫中將只會更新分支的遠(yuǎn)程跟蹤分支,此選項(xiàng)用于初始克隆。如果在--single-branch
創(chuàng)建克隆時(shí)遠(yuǎn)程的 HEAD 沒有指向任何分支,則不會創(chuàng)建遠(yuǎn)程跟蹤分支。
--no-tags
不要克隆任何標(biāo)簽,并remote.<remote>.tagOpt=--no-tags
在配置中設(shè)置,確保將來git pull
和git fetch
操作不會跟隨任何標(biāo)簽。后續(xù)顯式標(biāo)記提取仍然有效,(請參閱 git-fetch [1])。
可以結(jié)合使用--single-branch
來克隆和維護(hù)分支,而不是除單個(gè)克隆分支之外的引用。這對于維護(hù)某些存儲庫默認(rèn)分支的最小克隆以實(shí)現(xiàn)搜索索引很有用。
--recurse-submodules=<pathspec
創(chuàng)建克隆后,根據(jù)提供的
pathspec 初始化和克隆子模塊。如果未提供 pathspec,則將初始化并克隆所有子模塊。子模塊使用其默認(rèn)設(shè)置進(jìn)行初始化和克隆。生成的克隆已submodule.active
設(shè)置為提供的 pathspec 或“。” (意思是所有子模塊),如果沒有提供 pathspec。這相當(dāng)于git submodule update --init --recursive
克隆完成后立即運(yùn)行。如果克隆庫不具有 worktree /結(jié)帳忽略此選項(xiàng)(即如果任何的--no-checkout
/ -n
,--bare
或--mirror
給出)
--no-shallow-submodules
所克隆的所有子模塊將會變淺,深度為1。
--separate-git-dir=<git dir>
不要將克隆的存儲庫放置在它應(yīng)該存在的位置,而應(yīng)將克隆的存儲庫放置在指定的目錄中,然后創(chuàng)建一個(gè)與文件系統(tǒng)無關(guān)的 Git 符號鏈接。結(jié)果是 Git 倉庫可以從工作樹中分離出來。
-j <n> --jobs <n>
同時(shí)獲取的子模塊的數(shù)量。默認(rèn)為submodule.fetchJobs
選項(xiàng)。
<repository>
(可能是遠(yuǎn)程)從中克隆的存儲庫。有關(guān)指定存儲庫的更多信息,請參閱下面的 URLS 部分。
<directory>
要克隆到的新目錄的名稱。如果沒有明確指定目錄(repo
for /path/to/repo.git
和foo
for host.xz:foo/.git
),則使用源代碼庫的“人道”部分。只有當(dāng)目錄為空時(shí)才允許克隆到現(xiàn)有目錄。
通常,URL 包含有關(guān)傳輸協(xié)議,遠(yuǎn)程服務(wù)器地址和存儲庫路徑的信息。根據(jù)傳輸協(xié)議,這些信息可能不存在。
Git 支持 ssh,git,http和https 協(xié)議(另外,ftp 和 ftps 可以用于抓取,但效率不高,不推薦使用;不要使用它)。
本地傳輸(即 git:// URL)不會進(jìn)行身份驗(yàn)證,因此應(yīng)該謹(jǐn)慎使用不安全的網(wǎng)絡(luò)。
以下語法可以與它們一起使用:
ssh://user@host.xz:port/path/to/repo.git/
git://host.xz:port/path/to/repo.git/
https://host.xz:port/path/to/repo.git/
ftps://host.xz:port/path/to/repo.git/
ssh 協(xié)議也可以使用另一種類似 scp 的語法:
user@host.xz:path/to/repo.git/只有在第一個(gè)冒號前沒有斜線時(shí)才能識別此語法。這有助于區(qū)分包含冒號的本地路徑。例如,本地路徑foo:bar
可以被指定為絕對路徑或./foo:bar
避免被誤解為 ssh url。ssh 和 git 協(xié)議還支持?用戶名擴(kuò)展:
ssh://user@host.xz:port/~user/path/to/repo.git/
git://host.xz:port/~user/path/to/repo.git/
user@host.xz:/~user/path/to/repo.git/
對于本地支持的本地存儲庫,可以使用以下語法:
/path/to/repo.git/
file:///path/to/repo.git/
這兩種語法大部分是等價(jià)的,除了前者意味著--local 選項(xiàng)。
當(dāng) Git 不知道如何處理某個(gè)傳輸協(xié)議時(shí),它會嘗試使用remote-<transport>
遠(yuǎn)程助手(如果存在)。要顯式請求遠(yuǎn)程助手,可以使用以下語法:
<transport> :: <address>其中<address>可能是一個(gè)路徑,一個(gè)服務(wù)器和路徑,或者是由被調(diào)用的特定遠(yuǎn)程助手識別的任意類似URL的字符串。有關(guān)詳細(xì)信息,請參閱 gitremote-helpers [1]。如果存在大量名稱相似的遠(yuǎn)程存儲庫,并且您希望為它們使用不同的格式(例如,您使用的URL將被重寫為可工作的URL),則可以創(chuàng)建一個(gè)形式的配置部分: [url "<actual url base>"]
insteadOf = <other url base>For example, with this: [url "git://git.host.xz/"] insteadOf = host.xz:/path/to/ insteadOf = work:a URL like "work:repo.git" or like "host.xz:/path/to/repo.git" will be rewritten in any context that takes a URL to be "git://git.host.xz/repo.git".If you want to rewrite URLs for push only, you can create a configuration section of the form: [url "<actual url base>"] pushInsteadOf = <other url base>For example, with this: [url "ssh://example.org/"] pushInsteadOf = git://example.org/a URL like "git://example.org/path/to/repo.git" will be rewritten to "ssh://example.org/path/to/repo.git" for pushes, but pulls will still use the original URL.Examples
從上游克?。?/p>
$ git clone git://git.kernel.org/pub/scm/.../linux.git my-linux $ cd my-linux $ make
制作一個(gè)從當(dāng)前目錄借用的本地克隆,而不檢查事情:$ git clone -l -s -n。../copy $ cd ../copy $ git show-branch
從現(xiàn)有本地目錄借用時(shí)從上游克?。?/p>
$ git clone --reference /git/linux.git \ git://git.kernel.org/pub/scm/.../linux.git \ my-linux $ cd my-linux
創(chuàng)建一個(gè)裸存儲庫,將公布的更改發(fā)布給公眾:
$ git clone --bare -l /home/proj/.git /pub/scm/proj.git