3 回答

TA貢獻2019條經驗 獲得超9個贊
不同之處在于,使用時--mirror
,所有引用都按原樣復制。這意味著一切:遠程跟蹤分支,備注,引用/原件/ *(來自filter-branch的備份)。克隆的回購擁有一切。它也設置為遠程更新將從原點重新獲取所有內容(覆蓋復制的引用)。這個想法實際上是為了鏡像存儲庫,以獲得一個完整的副本,以便您可以在多個位置托管您的中央存儲庫,或者備份它。想想只是直接復制回購,除了更優雅的git方式。
新文檔幾乎說明了這一切:
--mirror
設置源存儲庫的鏡像。這意味著
--bare
。相比之下--bare
,--mirror
不僅將源的本地分支映射到目標的本地分支,它還映射所有引用(包括遠程分支,注釋等)并設置refspec配置,以便所有這些引用都被git remote update
目標存儲庫中的a覆蓋。
我的原始答案還注意到裸克隆和普通(非裸)克隆之間的差異 - 非裸克隆設置遠程跟蹤分支,僅創建本地分支HEAD
,而裸克隆直接復制分支。
假設起源有幾個分支(master (HEAD)
,next
,pu
和maint
),一些標簽(v1
,v2
,v3
),一些遠程分支機構(devA/master
,devB/master
),以及其他一些裁判(refs/foo/bar
,refs/foo/baz
,這可能是筆記,儲物箱,其他開發者的命名空間,誰知道)。
git clone origin-url
(非裸):您將得到所有復制的標簽,一個本地分支master (HEAD)
追蹤遠程分支origin/master
和遠程分支origin/next
,origin/pu
和origin/maint
。設置了跟蹤分支,這樣如果你做了類似的事情git fetch origin
,它們就會像你期望的那樣被提取。任何遠程分支(在克隆的遠程中)和其他引用都被完全忽略。git clone --bare origin-url
:您將獲得全部復制的標簽,地方分支機構master (HEAD)
,next
,pu
,和maint
,沒有遠程跟蹤分支。也就是說,所有分支都按原樣復制,并且它設置為完全獨立,不期望再次獲取。任何遠程分支(在克隆的遠程中)和其他引用都被完全忽略。git clone --mirror origin-url
:這些引用中的每一個都將按原樣復制。你會得到所有的標簽,地方分支機構master (HEAD)
,next
,pu
,和maint
,遠程分支機構devA/master
和devB/master
其他裁判refs/foo/bar
和refs/foo/baz
。一切都與克隆的遙控器完全一樣。設置遠程跟蹤,以便在運行時,git remote update
所有引用都將從原點覆蓋,就像您剛刪除鏡像并重新克隆它一樣。正如文檔最初所說,它是一面鏡子。它應該是功能相同的副本,可與原始版本互換。

TA貢獻1828條經驗 獲得超13個贊
$ git clone --mirror $URL
是一個簡稱
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
(直接從這里復制)
當前的man-page如何表達:
相比之下--bare,--mirror不僅將源的本地分支映射到目標的本地分支,它還映射所有引用(包括遠程分支,注釋等)并設置refspec配置,以便所有這些引用都被git remote update目標存儲庫中的a覆蓋。
- 3 回答
- 0 關注
- 33755 瀏覽
添加回答
舉報