2015-03-19 76 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

相关问题