如何防止人们在Perforce中编辑其他工作区选项?

时间:2009-10-14 09:12:16

标签: perforce administration workspace

我是Perforce的新手。我们当前的服务器似乎存在配置错误,因为任何人都可以更改其他人的工作区选项。

有谁知道如何快速解决这个问题?

谢谢,

托马斯

4 个答案:

答案 0 :(得分:5)

我不知道如何轻松或快速解决问题。

话虽如此,那真的存在问题吗?或者不同的人认为他们拥有不同的工作空间配置?在我工作的地方,我们将用户名添加到我们想要维护的任何工作空间作为我们自己的工作空间,并将其从共享工作空间中删除(或者有时使用不同的前缀)。

如果工作空间的所有权不明确并且导致问题,这将解决您的问题。如果是同事忽视所有权并故意进行更改的情况,您可能还有其他问题需要担心。

答案 1 :(得分:5)

如果在工作区中设置“已锁定”选项,则工作区只能由其所有者(或具有“admin”或更高访问级别的用户)进行修改。它还会阻止其他用户使用或删除该工作区。

答案 2 :(得分:2)

不是直接修复,但您可以通过实施“Spec Depot”跟踪对客户端规范所做的更改。请参阅KB article here

我必须承认,在阅读您的问题之前,我甚至没有意识到您可以在没有管理员权限的情况下修改其他用户的客户端规范。在使用Perforce的9年中,我从来没有遇到过这对人们来说是一个真正的问题。

cjhuitt建议使用用户名/首字母为客户端规范添加前缀是一个很好的建议,这是很常见的做法,特别是在大型安装中。

答案 3 :(得分:0)

感谢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;

我现在将尝试在创建或编辑工作空间后使用触发器强制执行锁定选项。 :)

托马斯