只有当客户端有旧版本时,如何同步文件



我想将我的工作空间同步到cl,但只同步工作空间上比cl旧的文件。任何比cl新的文件都应该被忽略。我该怎么做?我需要命令。当做

同步到变更列表通常非常简单;你只需要:

p4 sync @CL

但你想要的是同步一个变更列表,但有一个特殊的例外,那就是你不希望任何修订倒退。您可以使用以下命令获得大部分功能:

p4 sync #have,@CL

即"同步所有>=#have和<=@CL的修订"。

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

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

(如果这看起来像魔术,那就是——代码0=3187733588是当文件通过同步"添加"而不是"更新"时发出的消息代码,只有在没有#have-rev的情况下才会发生。我使用-e全局选项获得了这个数字。)


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

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

这并不能很好地执行,因为如果你有数千个文件,打开所有这些文件进行编辑,然后恢复它们将花费不可忽略的时间,但这需要较少的神奇脚本。唯一稍微棘手的部分是第三行,它说"让我的haveRev与所有打开的文件的workRev匹配"——这样,同步尝试向后移动的文件(即haveRev小于workRev的文件)在恢复之前会重置为更高的haveRev。

最新更新