【问题标题】:Can I integrate checked out files into a different branch on perforce我可以在 perforce 上将签出的文件集成到不同的分支中吗
【发布时间】:2008-11-18 21:12:28
【问题描述】:

我们正在进行设计,为此我们在主分支中创建了类的骨架。现在,我们开始编写代码,为此我们有了一个新分支。因此,如果我可以将主分支中的所有新文件移动到新分支中,那就太好了。但是,我还不能签入。那么,是否可以集成签出的变更列表?谢谢。

【问题讨论】:

    标签: perforce integrate


    【解决方案1】:

    Perforce 支持网站解释了如何执行此操作:Perforce Knowledge Base: Branching work in progress。如果它是一个不需要运行八个不同命令的单个步骤会更好。

    【讨论】:

    • 这是正确的答案 - 自己完成并且非常容易。
    • 当“git rebase”的 p4 等效项是大约 15 个命令时,git 因“难以使用”而受到抨击,这让我感到惊讶。
    • 也就是说,未来的搜索者应该查看 p4 2013+ 中 p4 搁置的 -b 和 -S 选项,它们允许您将搁置的变更列表重新定位到另一个分支。
    【解决方案2】:

    自 2013.1 版以来,分支正在进行的工作的方式是在分支上shelve 工作和unshelve 它。详细:

    1. 搁置未完成的更改:

      $ p4 shelve ...
      Change 182535 created with 10 open file(s).
      Shelving files for change 182535.
      edit //info.ravenbrook.com/project/mps/master/code/arenavm.c#26
      # etc.
      
    2. 在分支上取消搁置它们(使用-b 选项,通过分支规范映射文件名):

      $ p4 unshelve -b mps/branch/2013-06-05/diag -s 182535
      ... //info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - must resolve //info.ravenbrook.com/project/mps/master/code/arenavm.c@=182535 before submitting
      # etc.
      
    3. 解决由unshelve 产生的任何合并,使用p4 resolve -as 快速执行“安全”合并,然后像往常一样使用p4 resolve 执行其余部分。

      $ p4 resolve -as
      //gdr-peewit/info.ravenbrook.com/project/mps/branch/2013-06-05/diag/code/arenavm.c - copy from //info.ravenbrook.com/project/mps/master/code/arenavm.c
      # etc.
      $ p4 resolve
      No file(s) to resolve.
      

    (示例输出来自我刚才运行的一个真实用例。)

    【讨论】:

      【解决方案3】:

      我从来没有在 perforce 中找到一种方法来做到这一点,但你至少可以部分自动化它。

      通常当我不得不做类似的事情时,我会检查我想要移动到的分支中的文件,然后使用WinMerge 来区分分支并复制更改。完成后,您可以还原原始分支中的更改并将其签入新分支。

      这不是最好的解决方案(没有自动签出/添加/删除新分支上的文件),但它是我想出的最快的方法。

      【讨论】:

        【解决方案4】:

        不是真的。

        您当然可以简单地在新分支中打开文件进行编辑,然后手动将更改的文件从主分支的工作区复制到新分支的工作区。如果只有几个文件,这可能是最简单的方法。

        Here 是一些脚本,如果涉及大量文件,它们会很方便。 例如,使用P4Shelf 脚本,您可以创建所有更改文件的存档,然后在恢复更改的任何分支中自动打开它们。

        另外,请查看 Jim Tilander 为 Perforce 撰写的 other nifty scripts

        【讨论】:

          【解决方案5】:

          简单地改写 Gareth Rees 上面的回答,

          p4 unshelve -b target_branchspec -s changelist
          

          :)

          【讨论】:

            【解决方案6】:

            简单的答案是 - 不,你不能。不幸的是,快速浏览 Perforce 文档并没有为此提供现成的引用,但根据我的经验,任何从 Perforce 服务器下拉出地毯的尝试都会导致您的更改丢失,这会让您不开心露营车。

            进行备份,在新分支上创建一个新工作区,然后重新应用您的更改,可能使用 Herms 回答中概述的差异/合并策略。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-05-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-07
              • 1970-01-01
              相关资源
              最近更新 更多