Perforce - 如何从主分支中退出更改列表

时间:2015-11-02 15:52:52

标签: perforce

我在perforce中有以下更改列表:

1 - some work on //depot/A/file
2 - some work on //depot/A/file
3 - branching of //depot/A to //depot/B
4 .... - some work on //depot/A/file

我想在changelist 2上退出//depot/B

我试过以下:

p4 sync //depot/B/file@1
p4 edit //depot/B/file
p4 sync //depot/B/file@2
....

但第一行发生错误。

//depot/B/file@1 - no file(s) at that changelist number.

有没有办法在不提交//depot/A分支的情况下实现这一目标?

3 个答案:

答案 0 :(得分:3)

这就是我要做的事情:

p4 copy //depot/A/...@1 //depot/B/...
p4 submit
p4 merge //depot/A/...@2 //depot/B/...
p4 resolve -ay
p4 submit
p4 merge //depot/A/... //depot/B/...
p4 resolve -am
p4 resolve
p4 submit

你也可以在一个变更列表中完成所有这一切,但它会变得有点棘手 - 上面保持简单并留下一个易于遵循的历史记录(即每个修订版清楚地#34;复制从这一变化中,""忽略了这一变化",或者#34;合并了这些变化"而不是将这些变化全部合并在一起的单一修订版。)

答案 1 :(得分:0)

你不能简单地从B中取出2,因为它从A汇集为一个变化(1& 2)。

我认为实现这一目标的唯一方法是:

  1. 在B上回滚3(p4 edit //depot/B/file; p4 sync //depot/B/file#0; p4 submit //depot/B/filep4 delete //depot/B/file; p4 submit //depot/B/file
  2. 将A从A集成到B
  3. 将A从A集成到B
  4. 话虽如此,这有两个缺点:

    1. 如果你想在将来重新整合2从A到B,P4会被混淆,因为它知道它已经已经从A到B集成了2
    2. 如果你想从B集成回A,这会将B上2的反转传播回A,这可能不是你想要的。
    3. 所以,即使它更复杂,恢复集成的唯一正确方法正是你不想做的事情:

      1. 在A
      2. 上回滚2
      3. 将A集成到B
      4. 在A
      5. 上重新提交2

答案 2 :(得分:0)

根据您尝试同步到/ depot / B / file @ 1,我假设该文件先前不存在于/ depot / B / ...中?

如果我的假设是正确的,您将要删除该文件:

p4 delete //depot/B/file

并提交。

如果我的假设不正确且您新分支的文件是@ 2或更高,那么:

p4 edit //depot/B/file@1
p4 resolve -ay //depot/B/file
p4 submit