0

假设我们在 2 个分支中有一个文本文件:

//depot/work/branch1/file.txt
//depot/work/branch2/file.txt

我们这里还有一个中央源文件,两个分支都依赖它。

//depot/work/ImportantFile.txt

我对 ImportantFile.txt 和 branch1/file.txt 进行了本地编辑,但我也想将这些编辑复制到 branch2/file.txt,因为 ImportantFile.txt 现在希望 file.txt 的所有分支都符合某个规范。据我所知,我只有 2 个选项,但都不理想:

  1. 手动对两个文件进行相同的编辑,并在单个更改列表中提交这两个更改。问题在于,我希望 P4 历史知道这些文件仍然是 100% 集成的,但历史会显示它们是独立编辑的。
  2. 仅对 branch1/file.txt 进行编辑,仅在一个更改列表中提交此文件以及 ImportantFile.txt,然后立即将对 branch2/file.txt 的更改集成到第二个更改列表中。现在的问题是我已经破坏了构建一两分钟,直到 branch2/file.txt 获得所需的更改。

如何编辑文件,并在将这些编辑提交到第一个文件之前直接将这些编辑集成到另一个文件?

4

1 回答 1

1

首先:您可能已经知道这一点(并且由于您无法控制的原因不得不与它和平相处)但是:

ImportantFile.txt 不应位于分支结构之外。 如果您的版本控制文件依赖于它,则它需要自己进行版本控制,这意味着它需要独立存在于每个分支中,因为分支是您的版本控制方案的一部分。或者,也许file.txt不应该分支,如果要求它在所有分支中始终相同 - 为什么分支不允许分歧的东西?但我怀疑只是分支一切是更好的解决方案。

现在解决方法。(如果您无法解决上述问题的根本原因,那么您将来可能会遇到很多此类事情。)

p4 copy //depot/work/ImportantFile.txt //depot/work/NotABranch/ImportantFile.txt
p4 copy //depot/work/branch1/file.txt //depot/work/NotABranch/file.txt
p4 submit -d "Not a branch!  (wink)"

进行编辑//depot/work/NotABranch并提交。没有任何东西被破坏,因为如前所述,这不是一个分支,因此它不受任何强制所有分支同步移动的策略的约束。现在你可以这样做:

p4 integ //depot/work/NotABranch/ImportantFile.txt //depot/work/ImportantFile.txt
p4 integ //depot/work/NotABranch/file.txt //depot/work/branch1/file.txt
p4 integ //depot/work/NotABranch/file.txt //depot/work/branch2/file.txt
p4 resolve
p4 submit

合并历史表明,这两个分支file.txt都是来自单一公共来源的纯合并,因此两者之间的未来集成应该认识到它们不需要重新合并。

于 2021-02-12T21:02:02.220 回答