Perforce的各种命令
在以前的公司代码控制用的是CVS,到这家公司用的是Perforce,中国恐怕没有几家公司用这个玩意,老美的爱好,又或者是Expedia那帮MS出身的爱好。
今天对于Perforce的命令行稍做了些研究,主要用到了以下这些常用的命令:
[color=blue]p4 user
p4 client
p4 add, p4 edit, p4 open
p4 submit
p4 revert
p4 integrate
p4 resolve[/color] 等等.
重点是理解Perforce里面的Integration/Branch机制。在以前,并没有接触过通过SCM来进行代码的版本控制,这是*次真正地使用到。
[color=blue]p4 integrate a.txt b.txt[/color]
执行这条命令的具体效果分几种情况:
1. 如果b.txt不存在, 或者之前并不作为a.txt的分支存在, 那么integrate命令将做branch动作, 即将b.txt生成为a.txt的branch. 注意, 这里如果b.txt之前存在并且不作为a.txt的branch存在, 必须增加 -i 参数强制将其作为a.txt的branch.
2. 如果b.txt已经存在, 并且之前已经是a.txt的branch, 那么integrate命令将做merge动作, 将a.txt的修改更新到b.txt上, 并更新b.txt的版本号.
以上两种情况, 只要b.txt以前已经存在, 都有可能涉及到resolve来解决代码冲突.
关于resolve, p4提供了一系列的选项, 无非就是accept who了, 这里就不细说了.
integrate 还有一种用法, 如下:
[color=blue]p4 integrate -b aBranch[/color]
其中aBranch是事先用这个命令定义的:
p4 branch aBranch
在aBranch的view当中将定义代码间的integrate关系, 这样做的好处是可以在一个branch中定义多个integrate关系, 然后利用p4 integrate -b aBranch一次性integrate多个文件, 省去了一个一个文件更新的步骤.
如在aBranch中定义view时这样定义:
[color=blue]//depot/a.txt… //depot/b.txt
//depot/c.txt… //depot/d.txt[/color]
这样integrate这个branch时, 就可以一次性integrate两个文件了.
integrate的几个常用参数:
-i target之前与source无版本关联, 强制target成为source的branch;
-f 不比较target branch的版本是否与source版本对应, 强制执行integrate;
-d 当source文件删除时, integrate将删除target对应文件; 当target文件删除, integrate将re-branch source的对应文件到target.
对于其他SCM工具的版本控制, 日后还要多多研究, 估计大同小异.