Perforce提交已编辑的源文件,并在一个变更列表中从同一源文件进行分支/集成/合并/复制

Perforce提交已编辑的源文件,并在一个变更列表中从同一源文件进行分支/集成/合并/复制,perforce,perforce-integrate,Perforce,Perforce Integrate,假设我们有两个分支中的单个文本文件: //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的所有分支都符合特

假设我们有两个分支中的单个文本文件:

//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的所有分支都符合特定规范。据我所知,我只有两个选择,但都不理想:

手动对两个文件进行相同的编辑,并在单个更改列表中提交两个更改。问题是,我想让P4历史记录知道这些文件仍然是100%集成的,但历史记录将显示它们是独立编辑的。 仅对branch1/file.txt进行编辑,在一个变更列表中仅提交此文件以及ImportantFile.txt,然后立即将更改集成到第二个变更列表中的branch2/file.txt。现在的问题是,在branch2/file.txt获得所需更改之前,我已经中断了构建一两分钟。
在我将这些编辑提交到第一个文件之前,如何编辑一个文件,并将这些编辑直接集成到另一个文件中?

首先:您可能已经知道这一点,并且出于无法控制的原因不得不与之和解,但是:

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的两个分支都是来自同一个公共源的纯合并,因此这两个分支之间的未来集成应该认识到它们不需要重新合并。

当然,我将问题大大简化了。归根结底,我更喜欢在一个文件上进行编辑,并在该文件的一个分支上复制这些编辑,然后在单个变更列表中提交更改。为了进一步澄清,如果可能的话,单个P4流具有一个根目录和一组其他目录,以及一个子目录,该子目录是从另一个子目录分支出来的,但它们都位于根目录中。用户可以启动驻留在根目录中的应用程序,并在内部选择他们在流中处理的两个子分支中的哪一个子分支。此结构无法更改,因此它是这样的,这是工程师维护单个非常大的源代码项目的最佳工作流程,可以使用多个子目录中的数据,这些子目录也非常大,但它们的共同点远大于它们的不同点,因为在某一点上它们彼此分开,但是,随着单个大型源代码项目同时使用这两种方法进行更改,仍然需要进行增量更改。对我来说,这听起来不太理想——但是,作为自己的问题帖子,解开整个问题可能会更好。