【问题标题】:trying to hook up git-p4 branches properly试图正确连接 git-p4 分支
【发布时间】:2022-01-09 19:29:12
【问题描述】:

我正在使用 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 哈希,然后重新计算该修订版的哈希(及其所有子级)以反映它。我想我可以戴上水管工的帽子并编写自己的脚本以某种方式执行此操作,但我希望有一种受支持的方式。

【问题讨论】:

    标签: git branch perforce git-p4


    【解决方案1】:

    您可以使用 filter-branch 来执行此操作。

    1. 单独克隆分支
    2. 使用多个遥控器组合存储库
    3. 使用 filter-branch 将父级添加到较新的分支中

    来自: 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 似乎它更清楚地涵盖了这个案例。

    【讨论】:

    • 好东西。谢谢你。这看起来正是我要问的。
    • 尽管这或多或少正是我所要求的,但我认为我有一个更好的主意,可以调整我的 git-p4 sync 操作,使其正确事情并从一开始就导入一个正确链接的分支,不需要过滤。但它没有用!我还是不明白为什么。 (我将不得不提出一个单独的问题。)与此同时,我将接受这个答案,因为来自 consol.de 的“重新统一单独的 git 存储库”链接中的脚本很吓人,天哪,它似乎工作得像个冠军!
    【解决方案2】:

    根据您的描述,我认为您缺少 branchList 配置选项。 请阅读 git-p4 文档的Branch Detection 部分了解更多信息。

    顺便说一句,分支算法依赖于 P4 中的初始复制操作在没有文件更改的情况下完成,以便在新分支开始的源分支中找到确切的提交。否则,新分支将在源分支的顶部创建,您最终可能会得到不一致的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多