SVN锁定一个目录

13

抱歉,如果这是重复问题,我仍然没有找到正确的答案。

如何从命令行锁定svn目录?我需要锁定一个分支以阻止提交。

编辑:
我找到的所有答案都要求访问svn服务器,这对我来说不是一个选项。我在一家公司工作,源代码控制机器被锁在保险库中。我无法立即了解更改授权规则的过程。


1
https://dev59.com/mFHTa4cB1Zd3GeqPSYg8 - easel
3个回答

7

有没有办法通过脚本设置这个,而不必编辑 authz 文件?我需要临时阻止一个目录,以避免意外删除(例如在执行 svn rm 操作时)。 - runlevel0

2
我最近通过一种灵感来自于http://www.noah.org/engineering/olden/svn_directory_lock.html的解决方案来解决这个问题。
那篇文章中的Python脚本有些过度,但我在我的仓库的pre-commit hook中加入了以下内容:
#!/bin/sh

err() { echo ${1+"$@"} 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”并提交来为要锁定的目录创建“lock”属性。


你提到了一个Python文件,我在哪里可以看到并下载这个文件? - Heinz

0

这里有一种使用批处理脚本锁定文件夹的方法。

  1. 使用以下命令检出要锁定的目录

svn checkout DIRECTORY_TO_LOCK_SVN_URL LOCAL_DIRECTORY

  1. 迭代LOCAL_DIRECTORY中的所有文件,并在每个文件上运行SVN锁定命令。

Batch: iterate all files in a directory using a 'for' loop.

svn lock -m LOCK_MESSAGE FILE_PATH

  1. 清理并删除LOCAL_DIRECTORY。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接