强制禁止添加到叠加层

perforce forbid adding to overlay

几个关于 p4 覆盖映射的问题。

如果有覆盖客户端视图:

  //depot/dir1/...  //ws/build/...
  +//depot/dir2/... //ws/build/...
  1. 是否可以禁止添加文件到//depot/dir2

  2. 如何指定 p4 add 命令的目标是 //depot/dir1 还是 //depot/dir2

当覆盖导致多个软件仓库路径映射一个客户端路径时,p4 add(在客户端语法中)的默认值是最后一个映射。如果指定软件仓库路径,则使用该路径:

C:\Perforce\test\depot>p4 where ...
//depot/dir1/... //classic/... c:\Perforce\test\depot\...
+//depot/dir2/... //classic/... c:\Perforce\test\depot\...

C:\Perforce\test\depot>p4 add -n foo
//depot/dir2/foo#1 - opened for add

C:\Perforce\test\depot>p4 add -n //depot/dir1/foo
//depot/dir1/foo#1 - opened for add

因此,只需翻转映射线的顺序就可以得到您想要的效果(例如,您可以通过在映射中最后指定它来使 dir1 成为默认值)。仍然可以将文件显式添加到 dir2,但这不太可能是偶然发生的。

如果您想在客户端中指定 dir2 是一个只读路径并且您不能向其中添加文件,ChangeView 可用于此(因为您在 ChangeView 中映射的任何内容都会自动设为只读):

C:\Perforce\test\depot>p4 client -o | tail -n3
ChangeView:
        //depot/dir2/...@now


C:\Perforce\test\depot>p4 add -n //depot/dir2/foo
//classic/foo - can't add file that is restricted by client's ChangeView mapping

C:\Perforce\test\depot>p4 add -n //depot/dir1/foo
//depot/dir1/foo#1 - opened for add

在这个例子中,我使用 @now 作为 ChangeView 的修订版,因为我实际上并不想限制版本;我只想将路径的副作用限制为只读操作。

另一种使路径只读的方法是通过 p4 protect 删除 write 权限;如果您想将此作为所有用户的全局策略,那将是更好的解决方案。