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

时间:2010-04-21 21:22:47

标签: perforce

问题:2个项目共享主干并正在更新一些相同的文件。现在需要发布一个项目,因此在项目开始之前从检查点创建了一个新分支。

我列出了主线上的变更清单编号。使用它我可以使用带有一系列'p4 describe#'命令的脚本生成列表更改文件和diff输出。

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

4 个答案:

答案 0 :(得分:21)

对标题的回应:“是否可以使用一组更改列表创建补丁?” 是。

p4 diff2 -u //path_to_your_sources/...@cln_minus_1 //path_to_your_sources/...@cln > /tmp/cln.patch.

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

答案 1 :(得分:8)

我刚刚花了两个小时挣扎。使用cygwin patch,我不得不把路径弄得一直被识别出来。

最后,神奇的咒语看起来像这样(断了几行):

p4 diff2 -u //depot/foo/main/...@100003 //depot/foo/main/...@100000 |
    sed 's@//depot/@E:/Source/@g' |
    sed '/^+++\|---/s@/@\\@g' |
    patch

那是:

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

    Cygwin patch非常聪明,可以检查Perforce中的文件,但我不知道如何让它以静默方式执行。它会以Get file 'e:\Source\foo\whatever' from Perforce with lock?提示。

    这是在p4版本2010.1,一个在PowerShell上运行的Cygwin的最近安装。

    哦,在此之后,patch写出了Unix风格的行结尾,所以我使用u2d来解决这些问题。

答案 2 :(得分:4)

Perforce将让您挑选更改列表以进行集成,这可能比尝试生成和应用修补程序更容易。 Perforce将跟踪您所集成的修订版本,这可能使未来的集成更容易。

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

//depot/mycode/trunk

您检查了所有更改。你在过去的某个时刻将行李分支到:

//depot/mycode/rel

你有一个要合并的主干上的变更列表列表。从映射rel的客户端规范中,集成每个更改列表:

p4 integrate //depot/mycode/trunk/...@1234,1234 //depot/mycode/rel/...

其中1234是更改列表编号。每次集成后解决。如果您可以确定要做的好点,您可能还希望在集成期间在各个检查点构建,测试和提交集成。 (Perforce可以处理每次提交的多个集成,但如果您犯了错误,则需要恢复到签入的最后一个版本并重做中间集成并解析。)

答案 3 :(得分:-1)

Pool

我认为

是更简短,最简洁的命令。