2015-03-19 77 views
0

我有一個GIT回購,如:如何分割一個混帳回購協議分爲兩個不改變歷史提交哈希

    /--- [lots of work] 
        / 
root --- ref_a --- .---- [ Lots of work ] 

     orphane commit 
       based on ref_a--- [Lots ofworks] 
          \ --- [lots of work] 

我想這個回購分成兩個回購像

repo1:

    /--- [lots of work] 
        / 
root --- ref_a --- .---- [ Lots of work ] 

repo2:

 orphane commit 
       based on ref_a--- [Lots ofworks] 
          \ --- [lots of work] 

而且我想保持所有提交的哈希完好。

可能嗎?

+0

只是在另一個分支上工作?在另一個文件夾中複製整個回購? – Kedar 2015-03-19 05:34:33

+0

文件夾?我不想更改任何代碼目錄結構。 – valpa 2015-03-19 05:50:23

+0

將存儲庫克隆爲兩個,並刪除每個存儲庫中不需要的分支?或者我誤解你想要什麼?提交SHA-1僅在提交或其任何祖先提交發生更改時纔會更改,但在此情況並非如此。 – 2015-03-19 07:02:43

回答

1
   /--- [lots of work] (branch1) 
       / 
root --- ref_a --- .---- [ Lots of work ] (branch2) 

     orphane commit 
      based on ref_a--- [Lots ofworks] (branch3) 
          \ --- [lots of work] (branch4) 
  1. 複製整個庫到一個新的文件夾(f.ex.您的回購在〜/ myrepo和新的人會在〜/ newrepo)
  2. 在〜/ myrepo刪除分支店3和分支4;在〜/ newrepo中刪除分支branch1和branch2。
  3. 如果您有從遠程倉庫推出的遠程倉庫,請不要忘記爲〜/ newrepo刪除或更新遠程倉庫。
  4. 完成。後來,Git GC將刪除未引用的提交,而現有提交的哈希當然會保持不變。
+0

如果有成千上萬的分支和標籤會怎麼樣?我如何根據不同的根來區分它們? – valpa 2015-03-19 22:54:34

+0

如果回購有多個根(orphane提交),如何找到它們並將它們分開? – valpa 2015-03-19 22:56:53

+0

我對遲到的迴應表示抱歉。 當然,擁有數千個分支和標籤會使問題複雜化,因爲您並且只有您必須決定要刪除什麼。 您可以使用以下命令列出提交所屬的所有分支: 'git branch --contains ' – Baradzed 2015-03-28 08:44:20

相關問題