2011-03-20 151 views
9

对不起,如果这是重复的,我仍然没有找到正确的答案..SVN锁定目录

如何从命令行锁定svn目录?我需要锁定从签入

编辑一个分支:
所有这些问题的答案,我发现需要的人访问SVN服务器。这不是我的选择。我在一家公司里工作,在这家公司里,源代码控制机器被锁定在一个金库中。获得更改授权规则是我无法制定ATM的过程。

+1

http://stackoverflow.com/questions/4064229/svn-lock-branch – easel 2011-03-20 04:37:28

回答

7

您无法锁定目录。您可以创建授权规则,禁止对目录进行写入访问。这通常是如何完成这种类型的事情。你也可以使用预先提交的钩子,但我认为Subversion的authz是最好的。这里是一个链接:

http://svnbook.red-bean.com/nightly/en/svn.serverconfig.pathbasedauthz.html

+0

有没有办法通过脚本来设置它,而不必编辑authz文件? 我需要临时阻塞目录以避免意外删除(例如,当执行svn rm操作时)。 – runlevel0 2014-09-05 11:19:43

1

我最近解决了这个由http://www.noah.org/engineering/olden/svn_directory_lock.html

在该职位的特定Python脚本是矫枉过正激发了解决方案,但我把在pre-commit钩子以下我repsoitory:

#!/bin/sh 

err() { echo ${1+"[email protected]"} 1>&2; } # stderr is sent to user 

REPOS="$1" 
TXN="$2" 

SVNLOOK=/usr/bin/svnlook 

# Make sure there is a log message. 
# 
$SVNLOOK log -t "$TXN" "$REPOS" | grep -q "[a-zA-Z0-9]" 
if [ $? -eq 1 ] 
then 
    err "ERROR: Must enter a log message for this commit!" 
    exit 1 
fi 

# Usage: locked_dir dir [transaction_id] 
locked_dir() 
{ 
    if [ -z "$2" ]; then _tid=""; else _tid="-t $2"; fi 
    $SVNLOOK propget $_tid "$REPOS" lock "$1" >/dev/null 2>&1 
    if [ $? -eq 0 ]; then echo true; else echo false; fi 
} 

for d in $($SVNLOOK dirs-changed -t "$TXN" "$REPOS") 
do 
    locked_before=$(locked_dir $d) 
    locked_tx=$(locked_dir $d "$TXN") 

    if [ $locked_before = $locked_tx -a $locked_tx = true ] 
    then 
    err "ERROR: Directory $d is locked. Delete lock before you commit." 
    exit 1 
    fi 
done 

# All checks passed, so allow the commit. 
exit 0 

所以,现在,你可以简单地使用“SVN propset命令”,并致力于创建要锁定目录“锁定”属性。