我是 Perforce 的新手。我们当前的服务器似乎存在配置错误,因为任何人都可以更改其他任何人的工作区选项。
有谁知道如何快速解决这个问题?
谢谢,
托马斯
我是 Perforce 的新手。我们当前的服务器似乎存在配置错误,因为任何人都可以更改其他任何人的工作区选项。
有谁知道如何快速解决这个问题?
谢谢,
托马斯
我不知道有一种方法可以轻松或快速地解决问题。
话说回来,存在的能力真的有问题吗?还是不同的人认为他们拥有不同的工作空间配置?在我工作的地方,我们将用户名添加到我们想要维护为我们自己的任何工作区的前缀,并将其保留在共享工作区之外(或有时使用不同的前缀)。
如果在这种情况下工作空间的所有权不明确并且导致问题,这将解决您的问题。如果这是同事无视所有权并故意进行更改的情况,您可能还有其他问题需要担心。
如果您在工作区中设置了“锁定”选项,则工作区只能由其所有者(或具有“管理员”或更高访问级别的用户)修改。它还将阻止其他用户使用或删除该工作区。
不是直接修复,但您可以通过实施“规范库”来跟踪对客户端规范所做的更改。请参阅此处的知识库文章。
在阅读您的问题之前,我必须承认,我什至没有意识到您可以在没有管理员权限的情况下修改其他用户的客户端规范。在使用 Perforce 的 9 年中,我从来没有遇到过这对人们来说是一个实际的问题。
cjhuitt 建议在客户端规范前加上用户名/姓名首字母是一个很好的建议,并且是很常见的做法,尤其是在较大的安装中。
感谢Heath,锁定工作区是可行的方法。
我编写了一个小的 PERL 脚本来锁定所有现有的工作区:
#*******************************************************************************
# Module: LockClients.pl
# Purpose: A perl script using the CLI to lock all clients on a server
#
# Debug Flag:
$DEBUG_FLAG = 1 ; # 1 for TRUE, 0 for FALSE
# Get the list of clients on the server:
@list = `p4 clients`;
foreach $client (@list) {
# Get client name:
$clientname = (split / /,$client)[1];
if ( $DEBUG_FLAG ) { print ("Client name: $clientname \n"); }
# Prepare temporary file name (will contain the new config spec of the client):
$filename = sprintf("tmp_%s.txt",$clientname);
if ( $DEBUG_FLAG ) { print ("Temporary file: $filename \n"); }
# Get client spec:
@clientspec = `p4 client -o $clientname`;
# Write client spec to file:
open (VIRTUAL , ">$filename" ) || die "ERROR: Could not create $filename \n";
foreach $line (@clientspec) {
if ($line =~ m/^Options:.*$/m){
if ( $DEBUG_FLAG ) { print ("Line before substitution: $line"); }
$line =~ s/unlocked/locked/;
if ( $DEBUG_FLAG ) { print ("Line after substitution: $line"); }
}
print VIRTUAL $line;
}
close (VIRTUAL);
# Import new config spec in client:
`p4 client -i -f < $filename`;
if ( $DEBUG_FLAG ) { print ("Workspace $clientname locked !\n\n"); }
}
exit 0;
我现在将尝试在创建或编辑工作区后使用触发器强制执行锁定选项。:)
托马斯