Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Java代码获得P4上的锁_Java_Perforce - Fatal编程技术网

通过Java代码获得P4上的锁

通过Java代码获得P4上的锁,java,perforce,Java,Perforce,我想通过Java代码获得P4分支的锁。有人知道如何通过Java实现它吗 我使用以下代码: IBranchSpec ibranchSpec = underlyingPerforceOptionsServer .getBranchSpec("//Tools/Patch/bin/"); ibranchSpec.setLocked(true); 这里的问题是ibranchSpec包含所有仓库,我不知道为什么 setLock的API说,只有在服务器更新完成后,它才会开始工作。我试着用这样的方法: ibr

我想通过Java代码获得P4分支的锁。有人知道如何通过Java实现它吗

我使用以下代码:

IBranchSpec ibranchSpec = underlyingPerforceOptionsServer .getBranchSpec("//Tools/Patch/bin/");
ibranchSpec.setLocked(true);
这里的问题是
ibranchSpec
包含所有仓库,我不知道为什么

setLock的API说,只有在服务器更新完成后,它才会开始工作。我试着用这样的方法:

ibranchSpec.Update();
它抛出下面的异常。有什么想法吗

com.perforce.p4java.exception.RequestException: Error in branch specification.
  You cannot use the default branch view; it is just a sample.

您描述的行为是因为您使用的是新的分支规范,而不是现有的分支规范

但是,您可能会遇到一个常见的混淆,即将分支规范与存储库中的一组文件混淆

也就是说,分支spec描述了//Tools/Release/bin/。。。映射到//Tools/Patch/bin/。。。与//Tools/Patch/bin/…中的文件集不同

一般来说,Perforce工作流通常不会锁定文件集,因为Perforce的整个要点是允许许多用户同时编辑工作,并合并更改以管理冲突解决

但是,如果您有一个更高级别的开发工作流,您希望在其中控制谁和何时可以在特定时间签入存储库的特定部分,那么这是绝对合理的

根据我的经验,最好的方法是使用Perforceprotections机制:建立一个protections文件,描述存储库的各个部分,以及谁可以提交到哪个部分。使用用户组来描述用户集,并尽量使您的整体保护表保持合理的简单

然后,要从一组用户中“锁定”或“解锁”存储库的某个部分(“分支”),您需要更新保护表,以拒绝(“锁定”)或授予该组(“解锁”)向该分支写入的权限

这一相关问题在其答案中对该技术进行了详细描述: