我使用git-p4将多个分支从Perforce导入到git中,具有完整的历史记录,并且运行良好,只不过各个分支最终都是“无尾的”。我确切地知道在哪个版本(作为Perforce变更列表号和现在作为新创建的git版本),每个版本都是从主主干分支出来的,我非常希望在我的新的git存储库中显式地反映这一点,但我似乎不知道如何实现它。
具体来说,在导入之后,如果我在我的任何分支上做了一个git log,它总是得到一个没有父级的“最后”(最早)版本。我想把它组装起来,这样修订版就有了一个父版本,这是master上的一个特定版本。
想必我不能直接将一个分支连接到master上(也就是说,只需设置它的parent链接),因为git散列反映了整个历史,所以我的分支上的所有散列都可能需要调整,我对此没有意见。我可能需要某种类型的重基操作,但我似乎想不出怎么做。到目前为止,我尝试过的所有东西都试图“重放”更改,就像创建所有东西的不同版本一样,它们导致了很多合并冲突,我没有时间去解决,也不想解决。每个修订版的内容都是非常好的(如git-p4创建的);我所要做的就是重新构造它们链接在一起的方式。
具体来说,我想改变这一点:

这方面:

我看过git-p4的--detect-branches选项,但它看起来也不像我想做的那样。如果有办法让git p4 sync为分支中的“最后”版本设置一个家长,而不是让它成为孤儿,那就太完美了,但我没有办法。
撇开git-p4的所有细节不说,我想我想要的是(实际上)一种强制执行某个特定版本的方法--特别是在我的一个分支的“尾”处的这些孤儿(无父)版本中的一个--有一个parent链接,这是我选择的SHA哈希,然后重新计算该修订版的散列(以及它的所有子版本)以反映它。我想我可以戴上水管工的帽子,写我自己的剧本来做这件事,但我希望有一种支持的方法。
发布于 2021-12-03 16:11:46
您可以使用过滤器分支来完成此操作。
来自:https://labs.consol.de/development/git/2017/09/08/reunite-separate-git-repositories.html
现在使用https://github.com/newren/git-filter-repo可能会更好--但我还没有尝试过。
https://github.com/newren/git-filter-repo/blob/main/Documentation/converting-from-filter-branch.md#re-grafting-history似乎更清楚地报道了这一情况。
发布于 2021-12-05 10:14:49
根据您的描述,在我看来,您缺少了branchList配置选项。有关更多信息,请阅读git-p4文档的分支检测部分。
顺便说一句,分支算法依赖于P4中的初始复制操作,在没有文件更改的情况下完成,以便在新分支启动的源分支中找到确切的提交。否则,将在源分支的顶部创建新分支,您可能会得到不一致的代码。
https://stackoverflow.com/questions/70214146
复制相似问题