1

当前设置:

我们的 SVN 实例中有大约 7 个存储库。每个存储库都有多个应用程序,每个应用程序都应该有一个主干、标签和分支目录(仅此而已)!

例如:

 REPOSITORY-1
  --> APP-1
      --> trunk
      --> tags
      --> branches
  --> APP-2
      --> trunk
      --> tags
      --> branches

随着时间的推移,我注意到开发人员偏离了这个过程并创建了各种目录。例如:

 REPOSITORY-1
   --> APP-1
       --> src
       --> READ-ME.txt
   --> APP-2
       --> build
       --> random-file.java
       --> build.xml

有没有办法使用模式挂钩来限制模式拒绝任何尝试在应用程序下创建除主干、标签和分支之外的任何文件或目录的提交?预先感谢您的任何帮助!

额外信息:我们的 SVN 服务器在 RedHat 盒子上。

4

2 回答 2

1

在预提交中添加以下脚本以限制目录创建:

REPOS="$1"
TXN="$2"
DIRCHAR="/"
SVNLOOK=/opt/csvn/bin/svnlook
echo $($SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}') > /tmp/files_$TXN.txt
sed -i 's/ /&\n/g' /tmp/files_$TXN.txt
while read line
do
LASTCHAR=`echo $line | awk '{print substr($0,length,1)}'`
if [ "$LASTCHAR" == "$DIRCHAR" ]; then
    echo -e "Cannot commit directory." 1>&2
    exit 1
fi
done < /tmp/files_$TXN.txt
于 2014-04-07T07:45:11.030 回答
0

在预提交钩子中执行svnlook dirs-changed REPOS_PATH并检查输出(| grep -v ...)

于 2013-02-02T00:54:38.013 回答