繁体   English   中英

将多个hg存储库转换为具有多个分支的单个git存储库

[英]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提到的接枝点解决方案。

这应该是可能的:

  • 从三个Mercurial创建3个不同的Git回购
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM