gpt4 book ai didi

git - 从 git 迁移到 Perforce

转载 作者:IT王子 更新时间:2023-10-29 01:29:29 24 4
gpt4 key购买 nike

我的任务是将我的团队和源代码从 git 迁移到 Perforce,我正在寻找有关如何将 git 历史迁移到 p4 的想法。

我很乐意只移动 master 分支。然而,即使这样也被证明是有问题的。

我正在使用出色的 git-p4 工具。我在我的 p4 工作区中创建了一个目标区域,并使用 git p4 clone//depot/StuffFromGit 开始在 git-p4 中跟踪它。我将所有 git 存储库的更改移植到 git-p4 克隆中。然后我可以 git p4 submit 完成,所有更改都推送到 p4。

当 git 历史看起来像这样,漂亮且线性时,它工作得很好:

A---B---C---D

问题来自多人参与该项目。即使他们在 master 上工作,仍然会创建拆分和 merge 的分支。不过,git-p4 勇敢地处理了这个问题:

A---B---C---E
\--D--/

git p4 遍历 OK,按顺序提交 ABCDE(或者 ABDCE,任何一个人的历史在前)。

例如,当 C 和 D 都更改同一个文件,而 E 是一个真正诚实到善良的 merge 时,问题就来了。 git p4 rebase 在这里失败;它会倒回提交,但在回放期间它会先应用 C,然后尝试 D 并找到冲突。然后它会停止,要求我 merge 。好吧,E 包含 merge ,但它要求我手动 merge ! 'git p4 submit' 将以类似的方式失败,只是现在是 p4 拒绝 merge 前的更改。

Using index info to reconstruct a base tree...Falling back to patching base and 3-way merge...Auto-merging main.cppCONFLICT (content): Merge conflict in main.cppFailed to merge in the changes.Patch failed at 0005 Changing main

所以现在我卡住了。有没有办法清理 git 历史或让 git-p4 理解它?令人沮丧的是, merge 就在那里。

我的想法:

  • 使用 git filter-branch 删除所有提到的冲突文件。尽管缺少许多文件更改,但我会得到历史评论。历史上有大约 3000 次提交,我最终会删除所有关键(繁忙)文件的历史记录。在过滤文件导入结束时,我将通过执行 HEAD 的最终提交来添加丢失的文件。
  • 转储历史记录,对 HEAD 进行一次 p4 提交(简单但可悲)。
  • 不转到 p4:我已经尽可能长时间地研究这个想法。

没有一个是真正伟大的。关于如何使用 git 'gt p4 rebase' 或 'git p4 submit' 的任何想法?

最佳答案

“扔掉旧历史”选项并不像听起来那么糟糕:您可以将 git 存储库永远保留在它旁边,以防有人需要挖掘旧东西。不幸的是,没有办法在像 svn 和 p4 这样的老式线性系统中表示 git 的复杂历史 View 。

回顾旧历史的主要原因是“git annotate”之类的东西(我假设 p4 有类似的工具)。如果这就是您想要的,那么也许您真正想要做的是将所有 merge 提交压缩到它们的父项中(因此它们看起来像是单个提交而不是 merge )。这更像是 svn 和 p4 在他们自己的历史模型中记录的内容,其中 merge 看起来就像线性流中的单个提交。你可能可以用 git-filter-branch 或类似的东西来做到这一点。当然,这会丢失发生在子分支机构上的所有历史记录……但是 p4 用户习惯于没有这些信息。

关于git - 从 git 迁移到 Perforce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com