1

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

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

所有 SVN 存储库和目录目前由 TortoiseSVN 的当前版本 1.7.10 创建/处理。

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

TIA

4

3 回答 3

4

刚刚遇到同样的问题。svnlook info 和 svnlook youngest 命令(可能还有其他命令)给出的退出代码为 0 或 1,具体取决于提供的目录是否为 subversion 存储库。这适用于 SVN 存储库,而不是 user999713 声称的它们的“工作副本”。因此,以下 bash 脚本在目录是 SVN 存储库时显示 0,如果不是,则显示 1。

svnlook info directory > /dev/null 2>&1
echo $?
于 2014-04-03T11:10:36.513 回答
1

为什么不直接使用svn info %directory%?如果目录没有被 subversion 修改并且它独立于你的 WC 结构,它返回一个退出代码!= 0。另外,它只在您的本地工作,不需要连接到 repo。

于 2012-12-02T16:24:11.993 回答
0

命令行工具svn使您能够处理svn ls特定文件或目录。如果目录存在,则返回零,如果目录不存在,则返回非零 (a 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较新的修订。这样,备份不会花费那么长时间,您仍然可以从所有转储中重建您的存储库。

于 2012-12-02T01:05:09.943 回答