问题:2个项目共享主干并正在更新一些相同的文件。现在需要发布一个项目,因此在项目开始之前从检查点创建了一个新分支。
我列出了主线上的变更清单编号。使用它我可以使用带有一系列'p4 describe#'命令的脚本生成列表更改文件和diff输出。
我可以重新格式化该输出并以某种方式将其应用于新分支吗?
答案 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
那是:
p4 diff2
在我关注的两个修订版之间获取部分版本的统一差异(-u
)。第二个更改列表是之前我想要的第一个,否则它不会包含在差异中。sed
将//depot/
更改为E:/Source/
,这是我工作区所在的位置。patch
。 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
是更简短,最简洁的命令。