首页 > 解决方案 > Perforce - 如何防止“p4客户端”在未保存模板表单时创建客户端?

问题描述

状态的 Perforce 文档p4 client <no args>

p4 客户端命令将客户端规范放入临时文件并调用由环境变量 P4EDITOR 配置的编辑器。对于新工作区,客户端名称默认为 P4CLIENT 环境变量(如果已设置)或当前主机名。保存文件会创建或修改客户端规范。

我在我们的网络上看到的是无论如何都会创建客户端,即使我在没有保存的情况下退出也是如此。

前任。

[cad_test_user@sws-cab9-0 ~]$ pwd
/home/cad_test_user
[cad_test_user@sws-cab9-0 ~]$ env | grep P4
P4EDITOR=
P4PORT=tcp:p4p:1666
P4DIFF=tkdiff
P4CONFIG=.p4config
P4IGNORE=.ignore
P4USER=cad_test_user

[cad_test_user@sws-cab9-0 ~]$ p4 clients | grep sws-cab9-0
[cad_test_user@sws-cab9-0 ~]$ p4 client
Client: sws-cab9-0
Owner:  cad_test_user
Host:   sws-cab9-0.aus5.mythic-ai.com
Client sws-cab9-0 saved.
Root:   /home/cad_test_user
Options:        noallwrite noclobber nocompress unlocked nomodtime normdir
SubmitOptions:  submitunchanged
LineEnd:        local
View:
<quit without save>
Client sws-cab9-0 saved.

[cad_test_user@sws-cab9-0 ~]$ p4 clients | grep sws-cab9-0
Client sws-cab9-0 2021/04/06 root /home/cad_test_user 'Created by cad_test_user. '

现在,作为 .p4config 层次结构之外的另一个用户,我得到了 %clientroot% 的意外值:

[cad_test_user@sws-cab9-0 /]$  p4 -F %clientRoot% -ztag info
/home/cad_test_user

我想知道我们的默认设置是否有问题;为什么即使没有写入也会创建和保存客户端?理想情况下,我想在某种程度上管理默认规范,例如:

  1. 合成客户端名称,使其永远不是主机名,例如c:$USER:foo
  2. 没有“主机:”
  3. 将“根:”定义为个人的某个地方
  4. 除非用户执行写退出,否则不要创建客户端!

感谢您的回答!

标签: clientperforcespecifications

解决方案


设置一个触发器(表单form-save上的触发器client)来拒绝不符合您条件的客户。很难直接强制执行 #4,但只要您的其他标准中至少有一个需要编辑表单,它就可以间接处理得很好。

请注意,您可以将form-save触发器与form-out修改默认客户端表单的触发器配对 - 例如,您可以替换Root为明显无效的字段--ENTER SOMETHING PERSONALIZED HERE--,然后确保您的form-save触发器拒绝它。Perforce 系统管理员指南有一些很好的简单示例触发器,其中一个演示了自定义客户端规范默认值:https ://www.perforce.com/manuals/p4sag/Content/P4SAG/scripting.triggers.forms.out.html

根据您的标准#2,我建议您不要这样做,除非您处于多个主机共享单个文件系统很常见的环境中。默认的主机护栏可以防止您通过重用客户端规范而使工作空间状态失控,从而避免混淆自己(并可能丢失数据)。


推荐阅读