2017-07-06 30 views
0

我有一個git倉庫,我想用git捆綁命令只抓取一部分倉庫。如何只抓住幾個提交與Git捆綁創建

可以說在這個回購中有10個提交,但我只想搶第3個?也許稍後再抓住下一個3?等等

我該如何利用git bundle命令來做到這一點?

隨時填寫我可能沒有提供的其他細節上的空白,這可能對您有用。

回答

1

UPDATE - 合併關於捆綁限制的信息。 tl; dr - 必須在軟件包的頭部有一個參考

要包含在軟件包中的提交使用與用於指定要在log命令(等等)中指定的內容相同的語法來指定,除了必須使用命名參考(分支或標記)來指示應包含的內容。因此,對於你的榜樣(捆綁一日3個提交,然後再接下來的3,從回購10個提交):

您有

A -- B -- C -- D -- E -- F -- G -- H -- I -- J <--(master) 

然後回購你說

git bundle create a_to_c.bundle C 

其中C指向C的ref(分支或標籤)。後來

git bundle create d_to_f.bundle C..F 

在這種情況下C可以是SHA ID爲提交C(或該ID的明確前綴),或者它可以仍是一個重;但F必須是指向提交F的ref(標記或分支)。

這句法工作要任何時候包括從一個犯什麼可達(F在這個例子中)除了什麼是到達從另一個(C)。等效的命令是

git bundle create d_to_f.bundle ^C F 

其示出了一個更一般的語法,其中,可以很容易地添加到包含或排除多個的提交。

您在評論中注意到您可以使用標籤而不是SHA ID進行此項工作。我忘記了 - 但有人向我指出了一個不幸的 - 不清楚的編輯形式 - 是一個捆綁包不能包含懸而未決的提交。包中的每個提交都必須可以從包中的引用獲得。我認爲這可以防止創建難以訪問的懸掛對象,並且在將該捆綁包應用到另一個回購站時,這些對象在任何情況下都將立即符合gc的條件。

+0

當我嘗試上述命令時,我收到錯誤消息:致命:拒絕創建空束。 – Discoveringmypath

+0

我試着用縮短的散列或散列。我可以讓它與標籤一起工作,但我希望不使用標籤 – Discoveringmypath

+1

進行更新,以反映出造成這種混淆的原因。信用盡可能最好 - 我錯過了這個(自從我使用捆綁包以來已經很長時間了),並且在提議的編輯中向我指出了這一點。不幸的是,編輯沒有很好地整合到答案中,所以我自己重寫了它。 –