2014-02-26 36 views
0

我有一個很大的git回購,我想將其拆分爲2.我能夠使用「git filter-branch」或「git subtree split」來做到這一點,但兩種方法都是創建全新的提交ID(SHA)。我知道我們正在重寫歷史,它會改變提交id。git拆分回購但具有相同的提交ID

但是我的需求需要在分割回購後有相同的提交id。可能嗎?

例子:

有一個混帳回購富-bar.git下面提交

*foo-bar.git* 
1fd3dsg refs #1 change-1 to foo 
4sad2as refs #2 change-1 to bar 
3edsads refs #3 change-2 to foo 
5adsggh refs #4 change-2 to bar 

現在我們分開回購富-bar.git到foo.git和bar.git。現在foo.git將獲得所有爲foo和bar.git提交的提交,它將獲得爲bar提交的所有提交,但它們的提交ID已更改。

我得到了什麼:

*foo.git* 
s43dfsa refs #1 change-1 to foo 
a234s2f refs #3 change-2 to foo 

*bar.git* 
1s3ds3q refs #2 change-1 to bar 
3re2ef2s refs #4 change-2 to bar 

我所期待的。

*foo.git* 
1fd3dsg refs #1 change-1 to foo 
3edsads refs #3 change-2 to foo 

*bar.git* 
4sad2as refs #2 change-1 to bar 
5adsggh refs #4 change-2 to bar 

回答

5

更改提交ID是不可避免的。這些基於每次提交,提交消息和父提交ID的更改。

因爲在重新排列單個提交時,該父提交ID將發生更改,所以提交id不能保持不變。

+0

是的,這在數學上是不可能的(好吧,天文不可能,這是相似的),這就是你想要的。 Git是內容尋址存儲系統,這意味着您放入的內容成爲自己的地址。這就是爲什麼你可以信任git中的所有東西,就像它說的那樣。爲了能夠改變ID,除了不可能實現外,還會完全破壞一個令人難以置信的健壯的系統,這是許多(大多數)其他版本的問題,在這些系統中,你可以不依賴內容實際上是它的內容應該是。 –

+0

謝謝@Sven和GrayFixler ..我知道它不可能。但是,爲了解決我們的一個實驗失敗,我們發現這是唯一的方法,所以我想嘗試一下貪婪,如果有機會實現這一點..感謝澄清.. – Sridhar