【问题标题】:How to unshelve a shelved changelist to another branch prior to Perforce 2013?如何在 Perforce 2013 之前将搁置的变更列表搁置到另一个分支?
【发布时间】:2014-01-06 11:20:15
【问题描述】:

使用 Perforce Server 2012.2/538478,我如何将文件从主干中解冻到另一个分支?

当我尝试这样做时,我得到:

//filename... (not mapped to your workspace view)

在 Perforce 2013 中,我发现这个 unshelve command 真的很有帮助:

p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname

但是对于我目前使用的版本,我发现没有可以帮助我解决这个问题。

有什么建议吗?

【问题讨论】:

  • 为什么不升级到2013.1?这是一个非常强大的功能,值得升级。
  • 因为它不依赖我...

标签: perforce branching-and-merging unshelve


【解决方案1】:

您正在查看正确的命令,但可能不是正确的参数。我就是这样使用它的:

p4 unshelve -s 77655 -b MY_BRANCH_SPEC

取消搁置更改列表 77655,使用指定的分支规范将文件映射到新分支。

至关重要的是,您需要确保指定的分支映射和您当前的工作区映射都包含源文件和目标文件,否则您将收到“文件未映射”错误。

【讨论】:

  • 正如我所指定的,我正在使用Perforce Server 2012.2/538478 version,而不是使用您所引用的 2013 版本很遗憾
  • 啊我的错误 - 我不认为你想要什么是可能的,因为在 2012.2 中没有办法从旧分支映射到新分支
【解决方案2】:

其他答案对我不起作用,这是我使用 perforce 2014 所做的:

  1. 编辑您当前的工作场所,以便在其中映射 //depot/product/B1/... 和 //depot/product/B2/... (而不是相互映射,像普通映射一样映射到您的工作空间)
  2. 在 P4V 中,转到“分支映射”(查看菜单->分支映射)
  3. Ctrl+N 开始新的映射(或右键单击列表并选择“新建分支映射...”)
  4. 在“分支映射”下提供类似 B1_TO_B2 的名称
  5. 将View下的映射替换为例如

    //depot/product/B1/...       //depot/product/B2/...  
    
  6. 好的
  7. 创建一个空的更改列表,将放置未搁置的文件(否则它们将转到“默认”更改列表)。在下面的命令中,这个新更改列表的编号将是
  8. 在命令行中运行

    p4 unshelve -s <SOURCE_CL> -c <TARGET_CL> -b B1_to_B2
    
    • 如果不起作用,请确保在 .p4config 中设置了正确的工作区
  9. 现在您所要做的就是解析 中的文件

【讨论】:

  • 你救了我YUGE。谢谢。
【解决方案3】:

不幸的是,如果没有升级到 2013.1 并获得改进的 unshelve 操作,您将需要通过以下方式手动复制数据:

  • 在后备箱中搁置,注意已更改的特定文件
  • p4 edit 其他流/分支中的文件
  • 手动将未搁置的文件复制到其他流/分支(您不能为此使用p4 copyp4 integrate,因为它们未在主干上提交
  • 在另一个分支上测试并提交

【讨论】:

    【解决方案4】:

    在花了一些时间搜索和阅读之后,我还没有遇到将搁置的变更列表搁置到另一个分支的具体示例。最后我整理了一个具体的例子。

    Assuming you have a shelved changelist 324426 in Branch B1 and want to unshelve it to Branch B2.
    

    我能够创建分支规范,然后将更改列表取消搁置到另一个分支。 这正是我所做的:

    1. Create a text file named branchSpec.txt, with the content below: set you own Branch name and View.
    
    Branch:   B1_to_B2
    
    View:
    //depot/dev/main/B1/...       //depot/release/B2/...
    
    2. p4 branch -i < branchSpec.txt (in target directory)
    3. p4 unshelve -s 324426 -b B1_to_B2 (in target directory)
    

    Viola,B1 中更改列表 324426 中搁置的文件现在已取消搁置到 B2 并准备提交。

    【讨论】:

    • yantaq 的回答对我有用。唯一需要注意的是首先为 B2 创建工作区。然后获取与更改列表中要在B2中取消搁置的文件对应的代码库。然后按照上面的步骤。
    • 这对我也有用,但不确定为什么所有文件的 diff 都是空的,我需要逐个文件运行 p4 sync file1 然后 p4 resolve file1 只有这样我才能看到我的更改?
    【解决方案5】:

    在 P4 2012 中解决此问题的方法:

    1. 手动复制并用主干覆盖分支
    2. 右键单击 P4 客户端中的分支,然后单击“协调离线工作...”

    这将允许您选择新的和更改的文件并将它们添加到变更集中。

    【讨论】:

      【解决方案6】:

      您可以为此使用 P4 unshelve,但您必须创建一个分支映射,即 A_to_B。

      1] p4 取消搁置 -s CL_NUM -b A_to_B

      2] p4 add(为添加打开的文件)

      3] p4 解决

      注意:请不要忘记第 2 步。P4 默认情况下不会在您的目标分支中打开它们。你可以用“p4打开”来确认

      【讨论】:

        【解决方案7】:

        我认为你真正需要的是“p4 move -f”。这里有详细解释:p4 move -f: What It's For

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-24
          • 2013-04-24
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-23
          相关资源
          最近更新 更多