Когда из-за наложения несколько путей депо сопоставляют один клиентский путь, по умолчанию для 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
В этом примере Iя использую @now
в качестве ревизии для ChangeView
, потому что на самом деле я не хочу ограничивать версии;Я просто хочу, чтобы побочный эффект пути был ограничен только для чтения.
Другой способ сделать путь доступным только для чтения - это удалить разрешение write
через p4 protect
;это было бы лучшим решением, если вы хотите сделать эту политику глобальной для всех пользователей.