将多个 hg 存储库转换为具有多个分支的单个 git 存储库
我正在从 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。
这可能吗?
I am switching to git from Mercurial and have been using hg-fast-export successfully. Now I have a tricky situation. I have a project which is using separate hg repositories per-branch and I want to convert these to a single git repository with 'proper' branches, keeping my hg changesets if possible.
So the current structure looks like this - each folder is an hg repository:
Project-v1.0
Project-v2.0
Project-v3.0
I want to end up with a single git repository called 'Project' that contains 3 branches, v1.0, v2.0 and v3.0.
Is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当 hg 存储库是一个基础存储库的克隆时,您可以使用 hggit 扩展将它们导出到一个 git 仓库。假设您的分支位于目录 b1/、b2/ 和 b3/ 中,那么您所需要的就是
如果不同的 hg 存储库不相关,则必须使用 VonC 提到的移植点解决方案。
When the hg repositories are clones from one base repo, you can use the hggit extension to export them into one git repo. Say your branches live in the directories b1/, b2/ and b3/, then all you need is to
If the different hg repos are unrelated, you have to use the graft point solution which VonC mentioned.
这应该可以通过以下方式实现:
Project-v2.0
历史记录导入Project-v1.0
Git 仓库(通过添加>Project-v2.0
作为远程并在“v2.0
”分支中获取它:创建了 2 个不同的根)并且,通过移植点,链接两个分支在一起(
v1.0
分支的HEAD
成为v2.0
分支第一次提交的父级)。filter-branch
来制作这些移植点永久(即不限于您的存储库)(对
Project-v3.0
重复,将第一个分支提取到单独的v3.0
分支中,嫁接到 <v2.0
分支的 code>HEAD 和过滤器分支以使移植永久)您有类似的场景(尽管它是关于“前置一些历史记录”,而不是“附加” )在SO问题“如何将过去添加到git中存储库?”。
This should be possible with:
Project-v2.0
history intoProject-v1.0
Git repo (by addingProject-v2.0
as a remote and fetching it in a 'v2.0
' branch: 2 distinct roots are created)And, through a graft point, linking the two branches together (the
HEAD
ofv1.0
branch becomes the parent of the first commit ofv2.0
branch).filter-branch
to make those graft points permanent (i.e. not limited to your repo)(repeat for the
Project-v3.0
, fetch into the first one into a separatev3.0
branch, grafted to theHEAD
ofv2.0
branch, and filter-branch to make the graft permanent)You have a similar scenario (although it is about "prepend some history", not "append") in the SO question "How to prepend the past to a git repository?".