我的任务是将我的团队和源代码从 git 迁移到 Perforce,我正在寻找有关如何将 git 历史迁移到 p4 的想法。
我很乐意只移动主分支。然而,即使这样也被证明是有问题的。
我正在使用出色的 git-p4 工具。我在我的 p4 工作区中创建了一个目标区域,并用于git p4 clone //depot/StuffFromGit
在 git-p4 中开始跟踪它。我将所有 git 存储库的更改移植到 git-p4 克隆中。我可以然后git p4 submit
完成,所有更改都推送到 p4。
当 git 历史看起来像这样时,它工作得很好,很好而且线性:
A---B---C---D
问题来自多个从事该项目的人。即使他们在 master 上工作,仍然会创建拆分和合并的分支。尽管如此,git-p4 还是勇敢地处理了这个问题:
A---B---C---E
\--D--/
git p4 遍历 OK,按顺序提交 ABCDE(或 ABDCE,任一人的历史优先)。
例如,当 C 和 D 都更改同一个文件,而 E 是真正诚实的合并时,就会出现问题。git p4 rebase
在这里失败;它会倒回提交,但在播放期间它会先应用 C,然后尝试 D 并找到冲突。然后它会停下来,要求我合并。好吧, E 包含合并,但它要求我手动合并!'git p4 submit' 将以类似的方式失败,只是现在它是 p4 拒绝合并前的更改。
使用索引信息重建基础树... 回退到修补基础和 3 路合并... 自动合并 main.cpp CONFLICT(内容):在 main.cpp 中合并冲突 未能合并更改。 0005 更改主补丁失败
所以现在我被困住了。有没有办法清理 git 历史或让 git-p4 理解它?合并的存在令人沮丧。
我有过的想法:
- 使用 git filter-branch 删除所有提及的冲突文件。尽管缺少许多文件更改,但我会获得历史评论。在历史记录中大约有 3000 次提交,我最终会删除所有关键(忙碌)文件的历史记录。在过滤文件导入结束时,我将通过对 HEAD 进行最终提交来添加丢失的文件。
- 转储历史,对 HEAD 进行一次 p4 提交(简单但可悲)。
- 不移到 p4:我已经尽可能长时间地实现了这个想法。
没有一个真的很棒。关于如何 git 'gt p4 rebase' 或 'git p4 submit' 工作的任何想法?