?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
git-bundle - 通過歸檔移動(dòng)對(duì)象和引用
git bundle create <file> <git-rev-list-args>git bundle verify <file>git bundle list-heads <file> [<refname>…]git bundle unbundle <file> [<refname>…]
有些工作流要求一臺(tái)機(jī)器上的一個(gè)或多個(gè)開發(fā)分支在另一臺(tái)機(jī)器上復(fù)制,但這兩臺(tái)機(jī)器不能直接連接,因此不能使用交互式Git協(xié)議(git,ssh,http)。該命令提供了一種用于支撐git fetch
和git pull
通過在始發(fā)機(jī)器包裝在歸檔對(duì)象和引用,然后導(dǎo)入到那些使用另一存儲(chǔ)庫來操作git fetch
并git pull
通過某種手段移動(dòng)存檔(例如,通過sneakernet)之后。由于存儲(chǔ)庫之間不存在直接連接,因此用戶必須為目標(biāo)存儲(chǔ)庫持有的數(shù)據(jù)包指定基礎(chǔ):數(shù)據(jù)包假定基礎(chǔ)中的所有對(duì)象都已存在于目標(biāo)存儲(chǔ)庫中。
create <file>
用于創(chuàng)建名為file
的包。這需要git-rev-list-args
參數(shù)來定義包內(nèi)容。
verify <file>
用于檢查捆綁文件是否有效,并將干凈地應(yīng)用于當(dāng)前存儲(chǔ)庫。這包括對(duì)捆綁格式本身的檢查以及檢查先決條件提交是否存在并且在當(dāng)前存儲(chǔ)庫中完全鏈接。git bundle
打印缺少提交列表(如果有),并以非零狀態(tài)退出。
list-heads <file>
列出軟件包中定義的引用。如果后面跟隨一個(gè)引用列表,則只會(huì)打印出與給定值相匹配的引用。
unbundle <file>
傳遞包中的對(duì)象以git index-pack
存儲(chǔ)在存儲(chǔ)庫中,然后打印所有定義的引用的名稱。如果給出了參考文獻(xiàn)列表,則只列出與列表中相匹配的參考文獻(xiàn)。這個(gè)命令真的很管用,打算只能被調(diào)用git fetch
。
<git-rev-list-args>
一列的參數(shù),接受列表git rev-parse
和git rev-list
(和包含命名ref時(shí),請(qǐng)參閱指定下面的參考文獻(xiàn)),它指定的特定對(duì)象和引用運(yùn)輸。例如,master~10..master
導(dǎo)致當(dāng)前主引用與自第10個(gè)祖先提交后添加的所有對(duì)象一起打包。對(duì)可能打包的引用和對(duì)象的數(shù)量沒有明確的限制。
<refname>…
用于限制報(bào)告的參考文獻(xiàn)的列表。這主要是為了使用git fetch
,它只希望接收那些被請(qǐng)求的引用,而不一定是包中的所有內(nèi)容(在這種情況下,git bundle
就像git fetch-pack
)。
git bundle
將只打包顯示的引用git show-ref
:這包括頭部,標(biāo)簽和遠(yuǎn)程頭部。諸如master~1
不能打包的參考文獻(xiàn),但完全適合于定義基礎(chǔ)。可以打包多個(gè)參考,并且可以指定多個(gè)參考。包裝的物品是那些沒有包含在給定基地聯(lián)盟中的物品。每個(gè)基可以明確指定(例如^master~10
),或隱式地(例如master~10..master
,--since=10.days.ago master
)。
目的地所使用的基礎(chǔ)是非常重要的。在謹(jǐn)慎的方面犯錯(cuò)是可以的,導(dǎo)致包文件包含已經(jīng)在目標(biāo)中的對(duì)象,因?yàn)樵谀康牡亟獍鼤r(shí)忽略這些對(duì)象。
假設(shè)您希望將歷史記錄從計(jì)算機(jī)A上的存儲(chǔ)庫R1傳輸?shù)接?jì)算機(jī)B上的另一個(gè)存儲(chǔ)庫R2中。出于任何原因,A和B之間的直接連接不被允許,但我們可以通過某種機(jī)制將數(shù)據(jù)從A移動(dòng)到B(CD ,電子郵件等)。我們想要在R1的分支主機(jī)上進(jìn)行開發(fā)時(shí)更新R2。
為了引導(dǎo)流程,您可以先創(chuàng)建一個(gè)沒有任何基礎(chǔ)的軟件包。您可以使用標(biāo)簽來記住您上次處理的內(nèi)容,以便稍后使用增量包更新其他存儲(chǔ)庫:
machineA$ cd R1 machineA$ git bundle create file.bundle master machineA$ git tag -f lastR2bundle master
然后將file.bundle傳輸?shù)侥繕?biāo)計(jì)算機(jī)B.由于此捆綁包不需要提取任何現(xiàn)有對(duì)象,因此可以通過從計(jì)算機(jī)克隆來在計(jì)算機(jī)B上創(chuàng)建新的存儲(chǔ)庫:
machineB$ git clone -b master /home/me/tmp/file.bundle R2
這將在生成的存儲(chǔ)庫中定義一個(gè)名為“origin”的遠(yuǎn)程服務(wù)器,該服務(wù)器允許您從包中獲取和拉取數(shù)據(jù)。R2中的$ GIT_DIR / config文件將包含如下所示的條目:
[remote "origin"] url = /home/me/tmp/file.bundle fetch = refs/heads/*:refs/remotes/origin/*
要更新生成的mine.git存儲(chǔ)庫,可以使用增量更新替換存儲(chǔ)在/home/me/tmp/file.bundle中的包后進(jìn)行讀取或拉取。
在原始存儲(chǔ)庫中完成更多工作后,可以創(chuàng)建增量包來更新其他存儲(chǔ)庫:
machineA$ cd R1 machineA$ git bundle create file.bundle lastR2bundle..master machineA$ git tag -f lastR2bundle master
然后您將該軟件包轉(zhuǎn)移到另一臺(tái)機(jī)器以替換/home/me/tmp/file.bundle,并從中取出。
machineB$ cd R2 machineB$ git pull
如果您知道預(yù)期的收件人存儲(chǔ)庫應(yīng)提供哪些必要的對(duì)象,則可以使用該知識(shí)來指定基準(zhǔn),并提供一個(gè)截止點(diǎn)來限制生成的捆綁包中的修訂和對(duì)象。前面的例子為此使用了lastR2bundle標(biāo)簽,但您可以使用任何其他選項(xiàng),您可以將它們提供給git-log [1]命令。這里有更多的例子:
您可以使用以下兩種標(biāo)簽:
$ git bundle create mybundle v1.0.0..master
你可以使用基于時(shí)間的基礎(chǔ):
$ git bundle create mybundle --since=10.days master
您可以使用提交的數(shù)量:
$ git bundle create mybundle -10 master
您可以運(yùn)行git-bundle verify
以查看是否可以從以基礎(chǔ)創(chuàng)建的包中提?。?/p>
$ git bundle verify mybundle
這將列出你必須提交什么提交,如果你沒有提交,就會(huì)出錯(cuò)。
從收件人存儲(chǔ)庫的角度來看,捆綁包就像它從中提取或從中取出的常規(guī)存儲(chǔ)庫。例如,您可以在提取時(shí)映射引用:
$ git fetch mybundle master:localRef
你也可以看到它提供的參考資料:
$ git ls-remote mybundle