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

web*_*bXL 15 perforce

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

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

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

小智 21

对标题的回答:"是否可以使用一组更改列表创建补丁?" 是.

p4 diff2 -u //path_to_your_sources/...@cln_minus_1 //path_to_your_sources/...@cln > /tmp/cln.patch.
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,`p4 diff2`不会为添加或删除的文件输出差异,因此需要特殊处理才能让`patch`添加或删除它们. (5认同)

Rog*_*mbe 8

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

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

p4 diff2 -u //depot/foo/main/...@100003 //depot/foo/main/...@100000 |
    sed 's@//depot/@E:/Source/@g' |
    sed '/^+++\|---/s@/@\\@g' |
    patch
Run Code Online (Sandbox Code Playgroud)

那是:

  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修复它们.

  • 有关使用`p4 diff2`的警告,请参阅我对http://stackoverflow.com/a/4925343/179715的评论. (2认同)

Com*_*ger 5

Perforce 将让您挑选用于集成的更改列表,这可能比尝试生成和应用补丁更容易。Perforce 将跟踪您在何处集成了哪些修订,这可能会使未来的集成更容易。

假设您曾经有一个行李箱:

//depot/mycode/trunk
Run Code Online (Sandbox Code Playgroud)

您在那里签入了所有更改。您在过去的某个时候将主干分支为:

//depot/mycode/rel
Run Code Online (Sandbox Code Playgroud)

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

p4 integrate //depot/mycode/trunk/...@1234,1234 //depot/mycode/rel/...
Run Code Online (Sandbox Code Playgroud)

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