[英]Convert multiple hg repositories to single git repository with multiple branches
我正在转向Mercurial的git并成功使用hg-fast-export 。 现在我有一个棘手的情况。 我有一个项目,每个分支使用单独的hg存储库,我想将它们转换为具有“正确”分支的单个git存储库,如果可能的话保留我的hg变更集。
所以当前结构看起来像这样 - 每个文件夹都是一个hg存储库:
Project-v1.0
Project-v2.0
Project-v3.0
我想最终得到一个名为'Project'的git存储库,它包含3个分支,v1.0,v2.0和v3.0。
这可能吗?
当hg存储库是来自一个基本仓库的克隆时,您可以使用hggit扩展将它们导出到一个git仓库中。 假设您的分支位于目录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
如果不同的hg回购不相关,则必须使用VonC提到的接枝点解决方案。
这应该是可能的:
Project-v2.0
历史记录导入Project-v1.0
Git repo(通过将Project-v2.0
作为远程添加并将其添加到' v2.0
'分支中:创建2个不同的根) v1.0
分支的HEAD
成为v2.0
分支的第一个提交的父级)。 filter-branch
使这些移植点永久化(即不限于您的回购) (对于Project-v3.0
重复,将第一个获取到另一个v3.0
分支,移植到v2.0
分支的HEAD
,并使用filter-branch使移植永久化)
你有一个类似的场景(虽然它是关于“prepend some history”,而不是“append”)在SO问题“ 如何将过去添加到git存储库? ”中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.