从Git repo拉到Hg repo,Git repo是同一个项目,但失去了历史记录
我的设想如下 我从中克隆的项目最初是使用Mercurial进行版本控制的,我克隆了原始的repo及其所有历史。 在某个特定的时间点,项目所有者决定迁移到GitHub,但在迁移过程中丢失了所有的历史记录,因此新回购协议虽然是旧项目的延续,但实际上是从0版重新开始 我想坚持Hg,Hg Git显然会允许我从Git回购中退出,但我不知道如何将Hg回购的头和Git回购的尾粘在一起,这样我就可以像以前一样继续定期更新。 Git中与Hg回购协议头部匹配的实际提交并不是第一次提交,所以它不是尾部的尖端 我认为hg convert和--patchemap可能有用,但我读得越多,它对我来说就越不像是一个解决方案 有人能就我如何做到这一点提出建议吗从Git repo拉到Hg repo,Git repo是同一个项目,但失去了历史记录,git,mercurial,hg-git,Git,Mercurial,Hg Git,我的设想如下 我从中克隆的项目最初是使用Mercurial进行版本控制的,我克隆了原始的repo及其所有历史。 在某个特定的时间点,项目所有者决定迁移到GitHub,但在迁移过程中丢失了所有的历史记录,因此新回购协议虽然是旧项目的延续,但实际上是从0版重新开始 我想坚持Hg,Hg Git显然会允许我从Git回购中退出,但我不知道如何将Hg回购的头和Git回购的尾粘在一起,这样我就可以像以前一样继续定期更新。 Git中与Hg回购协议头部匹配的实际提交并不是第一次提交,所以它不是尾部的尖端 我认为h
更新
只是想告诉那些可能会尝试做类似事情的人,我最终成功地实现了我想要的结果,但这是一条漫长而曲折的道路,最终证明hg转换和拼接地图是答案
现在我有一个回购协议,它有两个不同的发展分支,就回购协议而言,它们没有共同的祖先,我将把它称为hydra李>
解决方案是什么?批处理文件。
是的,你听对了,批处理文件。
解决方案实际上是一组3,首先从Github拉到只持有Git回购的回购。第二个从Git回购协议中提取到hydra(汞源不会改变,所以我不需要再次提取)。第三,重新运行hg convert命令,以便使用来自hydra的新信息更新加入的回购
这很不愉快,冗长,设置起来有点像噩梦,但它现在运行得很干净,我的最终回购是一个可预测且合理的大小。从未尝试过这一点,但在桥接回购的/.hg中操作git映射文件可能会行得通。我想这样试试:
这可能完全是胡说八道,但至少HgGit的较旧(“dumber”)版本只是通过这个映射文件确定了必要的git对象。所以值得一试…听起来它可能会奏效,我明天会试一试,看看效果如何。谢谢原则上它是有效的。我不知道如何从Git中只提取根,所以我提取了很多,但使用strip也不是问题。然而,当我用mapfile连接所有内容并再次从Git中提取时,磁盘上的repo的大小增加了5倍,尽管我只提取了200个修订版,但没有考虑到大小的增加。一个克隆人的大小只有我预期的一半,但仍然是我预期的两倍。你的答案绝对有效,结果证明我想做的其实不是一个可行的解决方案。