在为我的SVN目录设置备份'脚本'(在服务器上 - 而不是我的本地工作目录)的过程中,通过svnadmin使用GUI或DND添加到备份列表中作为安全功能,我想检查每个选定的目录实际上是否是一个正确的SVN目录。
我查看了现有的目录结构,发现它有以下子目录: conf,db,hooks,locks 以及文件格式&的README.txt
所有SVN repos&目录由TortoiseSVN的当前版本1.7.10创建/处理。
关于如何检查此特定结构的任何想法或意见是仅接受SVN目录并拒绝所有其他目录的好方法?
TIA
答案 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 dump
或svnadmin hotcopy
。您可以编写一个脚本来跟踪备份的Subversion的最新修订版,然后只执行svnadmin dump
个较新的修订版。这样,备份不需要那么长时间,您仍然可以从所有转储中重建存储库。