仅当客户端具有旧版本时,如何在 perforce 中同步文件?

How to sync file in perforce only if client has older version?

我想将我的作品 space 同步到 cl,但只有作品 space 中比 cl 更早的那些文件。任何比 cl 更新的文件都应该被忽略。我怎样才能做到这一点?我需要一个命令。问候。

通常同步到更改列表非常简单;你会这样做:

p4 sync @CL

但是您正在寻找的是同步更改列表,但您不希望任何修订倒退。您可以使用此命令完成大部分操作:

p4 sync #have,@CL

即"sync all revisions that are >=#have and <=@CL"。

这遗漏的是#have 不存在的文件(它们不会包含在使用#have 的范围内)。这些比较棘手,但这是一种方法:

p4 -F "%code0% %depotFile%%depotRev%" sync -n @CL | grep "^318773588 " | sed -e "s/318773588 //" | p4 -x - sync

(如果这看起来很神奇,那就是——code0=318773588 是当文件通过同步 "added" 而不是 "updated" 时发出的消息代码,只有在 "updated" 时才会发生没有 #have rev。我使用 -e 全局选项得到了这个数字。)


一种完全不同的方法是利用以下事实:"sync" 在打开文件进行编辑时不会向后移动工作修订版:

p4 edit //...
p4 sync @CL
p4 -F %depotFile%%workRev% opened | p4 -x - sync
p4 revert -a

如果您有数千个文件,打开所有这些文件进行编辑然后还原它们将花费不可忽略的时间,但它的性能不太好,但它需要的魔术脚本少一些。唯一有点棘手的部分是第三行,它说的是 "make my haveRev match my workRev for all opened files" —— 这样同步尝试向后移动的文件(即 haveRev 小于 workRev 的地方)在你恢复之前被重置为更高的 haveRev。