是否可以使用一组更改列表创建修补程序?

是否可以使用一组更改列表创建修补程序?

问题描述:

问题:2个项目共享中继并正在更新一些相同的文件。现在需要发布一个项目,因此在项目启动之前从检查点创建了一个新分支。是否可以使用一组更改列表创建修补程序?

我有一个只是从主线我的变更单号码列表。使用该命令,我可以使用一系列'p4 describe#'命令生成一个列表,更改文件和diff输出。

我可以重新格式化该输出并以某种方式将其应用于新分支?

Perforce会让你挑选整合的修改表,这可能比尝试生成和应用修补程序更容易。 Perforce将跟踪您在哪里集成的修订版本,这可能会使未来的集成变得更加容易。

让我们假设你曾经有一个主干:

//depot/mycode/trunk 

你在所有的变化有检查。你过去在某些点支干线到:

//depot/mycode/rel 

而且你有主干变更表合并列表。从映射相对客户端规范,整合各自的变更表:

p4 integrate //depot/mycode/trunk/[email protected],1234 //depot/mycode/rel/... 

其中1234是变更表数。每次整合后解决。如果你能确定好的点,你也可能希望在整合过程中在各个检查点建立,测试和提交你的集成。 (Perforce可以处理每个提交的多个集成,但是如果你犯了一个错误,你需要恢复到最后的版本签入并重做中间集成并解决。)

+0

为什么我需要解决,如果我将成为唯一一个签入? 不在更改后提交的代码中整合仅更改列表因素吗?如果它正在查看整个文件,我可以描述冲突。 – webXL 2010-04-22 01:27:37

+0

Perforce让您在每次集成时都解决问题,以防您需要手动解决任何冲突。在你的情况下,如果新的更改列表更改了以前更改列表中添加的代码,则会发生冲突。 – 2010-04-22 02:44:39

对标题的回应:“是否有可能使用一套更改列表创建一个补丁?“ 是的。

p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch. 

然后,您可以使用/tmp/cln.patch作为修补程序实用程序的输入。这里,'cln'是您想要为其创建补丁的已提交更改列表号。

+2

请注意,'p4 diff2'不会为添加或删除的文件输出差异,所以那些需要特殊处理才能让'patch'添加或删除它们。 – jamesdlin 2016-09-28 23:21:18

我刚刚花了两个小时与此挣扎。使用cygwin patch,我不得不走路,直到他们被识别。

最终,魔术咒语看起来像这样(跨线断开):

p4 diff2 -u //depot/foo/main/[email protected] //depot/foo/main/[email protected] | 
    sed '[email protected]//depot/@E:/Source/@g' | 
    sed '/^+++\|---/[email protected]/@\\@g' | 
    patch 

即:

  1. 使用p4 diff2获得的部分统一差异(-u)我关心的两个修订之间的仓库。第二个更改列表是我想要的第一个之前的,否则它不包含在diff中。
  2. 使用sed//depot/更改为E:/Source/,这是我工作区所在的位置。
  3. 将正斜杠改为双反斜杠(这似乎使它工作)。
  4. 管理结果通过patch

Cygwin patch足够聪明地检查Perforce中的文件,但我不确定如何让它静静地执行它。它会以Get file 'e:\Source\foo\whatever' from Perforce with lock?提示。

这是p4版本2010.1,它是在PowerShell上运行的最新Cygwin安装。

呵呵,在此之后,patch写出了unix风格的行结尾,所以我用u2d来修复它们。

+1

看到我的评论http://*.com/a/4925343/179715有关使用'p4 diff2'的警告。 – jamesdlin 2016-09-28 23:22:27