2011-03-20 158 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命令」,並致力於創建要鎖定目錄「鎖定」屬性。