2011-01-26 113 views
4

我从切换到水银Git和已经使用hg-fast-export成功。现在我有一个棘手的情况。我这是每个分支使用单独的汞库的一个项目,我想这些转换为与“适当的”树枝单一git仓库,让我的汞的变更如果可能的话。转换多个汞库单的Git仓库有多个分支

所以目前的结构是这样的 - 每个文件夹是一个汞库:

Project-v1.0 
Project-v2.0 
Project-v3.0 

我想叫“工程”,它包含3个分支,V1.0单一的git仓库,V2落得.0和v3.0。

这可能吗?

回答

2

当汞库是从一个基站回购克隆,您可以使用hggit扩展其导出到一个混帐回购协议。说你的分支住在目录B1 /,B2/B3和/,那么所有你需要的是

cd b1; mkdir ../gb1 && git init --bare ../gb1 && hg push ../gb1; cd .. 
cd b2; mkdir ../gb1 && git init --bare ../gb2 && hg push ../gb2; cd .. 
cd b3; mkdir ../gb1 && git init --bare ../gb3 && hg push ../gb3; cd .. 
# now you have one git repo for each hg branch 

cd gb1 
git remote add gb2 ../gb2 
git remote add gb3 ../gb3 
git fetch --all 
# now you have all branches in the gb1 repo 
rm -r ../gb2 ../gb3 
# the other repos are now not used anymore 

如果不同的汞回购协议是无关的,你必须要使用的VonC提到的嫁接点解决方案。

1

这应该是可能的:

  • 创建来自三个水银那些
  • 导入Project-v2.0历史进入Project-v1.0 GIT中回购3个不同的GIT中回购(通过添加Project-v2.0作为远程和在一个“v2.0取它'分支:创建2个不同的根)
    并且,通过graft point,将两个分支连接在一起(HEADv1.0分支变成S上的第一父提交v2.0分支的)。
  • 使用filter-branch使这些移植点永久(即不限于您的回购)

(重复的Project-v3.0,提取到的第一个到一个单独的v3.0分支,嫁接到v2.0分支的HEAD,并过滤分支,使移植永久)

你有一个类似的情况(虽然它是关于“prepend一些历史”,而不是“追加”)在SO问题“How to prepend the past to a git repository?”。