是否可以使用一组更改列表创建修补程序?
问题: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可以处理每个提交的多个集成,但是如果你犯了一个错误,你需要恢复到最后的版本签入并重做中间集成并解决。)
对标题的回应:“是否有可能使用一套更改列表创建一个补丁?“ 是的。
p4 diff2 -u //path_to_your_sources/[email protected]_minus_1 //path_to_your_sources/[email protected] > /tmp/cln.patch.
然后,您可以使用/tmp/cln.patch作为修补程序实用程序的输入。这里,'cln'是您想要为其创建补丁的已提交更改列表号。
请注意,'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
即:
- 使用
p4 diff2
获得的部分统一差异(-u
)我关心的两个修订之间的仓库。第二个更改列表是我想要的第一个之前的,否则它不包含在diff中。 - 使用
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
来修复它们。
看到我的评论http://*.com/a/4925343/179715有关使用'p4 diff2'的警告。 – jamesdlin 2016-09-28 23:22:27
为什么我需要解决,如果我将成为唯一一个签入? 不在更改后提交的代码中整合仅更改列表因素吗?如果它正在查看整个文件,我可以描述冲突。 – webXL 2010-04-22 01:27:37
Perforce让您在每次集成时都解决问题,以防您需要手动解决任何冲突。在你的情况下,如果新的更改列表更改了以前更改列表中添加的代码,则会发生冲突。 – 2010-04-22 02:44:39