如何在2013年之前的Perforce中将已搁置的更改列表还原到另一个分支?

18

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

尝试这样做时,我遇到以下问题:

//filename... (not mapped to your workspace view)
在 Perforce 2013 中,我发现这个 unshelve 命令 非常有帮助:
p4 unshelve -s <changlist#-with-shelved-files> -S //depot/streamname

但是在我目前使用的版本中,我发现没有任何可以帮助我解决这个问题的东西。

有什么建议吗?


2
为什么不升级到2013.1呢?它带来了非常强大的功能,是值得升级的。 - Bryan Pendleton
1
因为这不取决于我... - Yair Nevet
8个回答

12
其他答案对我无效,这是我使用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/...  
  • 好的
  • 创建一个空的Changelist,用于存放未提交的文件(否则它们将被放到“默认”Changelist中)。下面命令中新Changelist的编号将是。
  • 在命令行中运行:

    p4 unshelve -s <SOURCE_CL> -c <TARGET_CL> -b B1_to_B2
    
    • 如果它不起作用,请确保在.p4config中设置了正确的工作区
  • 现在您只需要解决< TARGET_CL >中的文件即可

  • 你救了我大忙。谢谢你。 - httpete
    可以使用p4v helix可视化客户端来完成相同的操作, 按照步骤1到6,然后右键单击架子集并单击取消存储 在取消存储窗口中选择复选框“映射未存储的文件”,然后浏览并选择新的分支映射。 单击取消存储,文件将被取消存储。 对于我来说,新文件被移动到默认的更改列表中,因此我必须将它们移动到正确的更改列表中。 - Rahul Sonone

    9

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

    p4 unshelve -s 77655 -b MY_BRANCH_SPEC
    

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

    需要注意的是,必须确保指定的分支映射和当前工作区映射都包含源文件和目标文件,否则会出现“文件未映射”错误。


    正如我所指定的,我正在使用Perforce Server 2012.2/538478版本,而不是你提到的不幸的2013版本。 - Yair Nevet
    啊,我的错误 - 我认为你想要的是不可能的,因为在2012.2中没有办法从旧分支映射到新分支。 - ninesided

    6

    在花了一些时间搜索和阅读后,我没有找到一个关于如何将存储的代码变更列表恢复到另一个分支的具体示例。最终,我总结了一个具体的示例。

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

    我能够创建分支规范(branch spec),然后将变更列表(changelist)取消存储(unshelve)到另一个分支。 以下是我的具体操作:

    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,变更列表324426中的文件现在已经从B1上删除并移至B2,并准备提交。


    yantaq的答案对我有用。唯一的注意事项是首先为B2创建工作区。然后获取与要在B2中取消搁置的更改列表中的文件相对应的代码库。然后按照上述步骤进行操作。 - Sachin Shetye
    这对我也起作用了,但不确定为什么所有文件的diff都是空的,我需要逐个文件运行p4 sync file1,然后运行p4 resolve file1,只有这样才能看到我的更改? - Ricky Levi

    6
    很遗憾,如果您不升级到2013.1并获得改进的还原操作,则需要手动复制数据,步骤如下:
    • 在主干中进行还原操作,注意更改的特定文件
    • p4 edit 您在其他流/分支中的文件
    • 手动将还原的文件复制到其他流/分支(无法使用 p4 copyp4 integrate,因为它们未在主干上提交)
    • 在其他分支上进行测试和提交

    0

    这是帮助我将一个变更列表从一个分支移动到另一个分支的方法。

    假设您在源分支"//depot/release1/main/"中有一个已存储的变更列表#112233,您想要将其移动到目标分支"//depot/release2/main/"

    1. 在文本编辑器中创建一个分支规范:

    nano branch-spec.txt

    Branch: R1_to_R2
    View:
       //depot/release1/main/... //depot/release2/main/...
     
    

    2. 创建一个分支 p4 branch -i < branch-spec.txt 3. 取回变更 p4 unshelve -s 112233 -b R1_to_R2 4. 解决冲突 p4 resolve

    0

    你可以使用 P4 unshelve 来实现,但是你需要创建一个分支映射,即 A_to_B。

    1] p4 unshelve -s CL_NUM -b A_to_B

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

    3] p4 resolve

    注意:请不要忘记第二步。P4 默认不会在目标分支中打开它们。你可以通过 "p4 opened" 命令来确认。


    0

    解决这个问题的方法是在P4 2012中:

    1. 手动将分支与主干进行复制和覆盖
    2. 在P4客户端中右键单击分支,然后单击“调和离线工作...”

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


    -1

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接