如何验证目录是SVN存储库

时间:2012-12-01 23:47:11

标签: svn

在为我的SVN目录设置备份'脚本'(在服务器上 - 而不是我的本地工作目录)的过程中,通过svnadmin使用GUI或DND添加到备份列表中作为安全功能,我想检查每个选定的目录实际上是否是一个正确的SVN目录。

我查看了现有的目录结构,发现它有以下子目录: conf,db,hooks,locks 以及文件格式&的README.txt

所有SVN repos&目录由TortoiseSVN的当前版本1.7.10创建/处理。

关于如何检查此特定结构的任何想法或意见是仅接受SVN目录并拒绝所有其他目录的好方法?

TIA

3 个答案:

答案 0 :(得分:2)

刚遇到同样的问题。 命令svnlook info和svnlook最年轻(也可能是其他人)给出退出代码0或1,具体取决于提供的目录是否是subversion存储库。 这适用于SVN repos,而不适用于工作副本'他们作为user999713声称。 因此,当目录是SVN repo时,以下bash脚本显示0,否则显示1。

svnlook info directory > /dev/null 2>&1
echo $?

答案 1 :(得分:1)

为什么不使用svn info %directory%?如果目录没有被subversion修改,它返回退出代码!= 0,并且它与WC结构无关。此外,它仅适用于您当地的一方,与所需的回购无关。

答案 2 :(得分:0)

命令行工具svn使您能够执行特定文件或目录的svn ls。如果目录存在,则返回零;如果目录不存在,则返回非零(1)。你可以在程序中使用它。

echo -n "What directory?" 
read directory
if svn ls $REPO/$directory > /dev/null 2>&1
then
    echo "Directory $directory exists in $REPO"
else
    echo "ERROR: Directory $directory does not exist in $REPO"
fi

如果在服务器上进行此操作,您可以使用svnlook tree执行类似操作。这比使用svn ls更快。

顺便提一下,当您在Subversion中备份时,存储库目录结构与工作目录的布局非常不同。要备份Subversion,建议您使用svnadmin dumpsvnadmin hotcopy。您可以编写一个脚本来跟踪备份的Subversion的最新修订版,然后只执行svnadmin dump个较新的修订版。这样,备份不需要那么长时间,您仍然可以从所有转储中重建存储库。