2012-12-01 74 views
0

在通過svnadmin使用GUI或DND爲我的SVN目錄(在服務器 - 不是我的本地工作目錄)設置備份「腳本」的過程中添加到作爲安全功能,我希望檢查備份列表,每個選定的目錄實際上都是一個合適的SVN目錄。如何驗證目錄是一個SVN倉庫

我已經看過我現有的目錄結構,並發現它具有以下子目錄: 的conf,DB,鉤,鎖 以及文件格式&的README.txt

所有SVN回購&目錄目前由TortoiseSVN的當前版本1.7.10創建/處理。

有關如何檢查此特定結構的任何想法或意見是僅接受SVN目錄並拒絕所有其他目錄的好方法?

TIA

+1

您是否有特定的理由從文件結構創建備份?爲什麼不使用推薦的方式,只需創建備份轉儲? – Filburt

+0

我沒有備份結構 - 至少不是直接。我想驗證該目錄實際上是一個SVN回購,而不僅僅是任何舊的目錄! – user999713

+0

@ user999713 - SVN回購是在任何'SVNParentPath'孩子 –

回答

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。這樣,備份不需要那麼長時間,您仍然可以從所有轉儲中重建您的存儲庫。

+0

我是_not_試圖看到它是一個工作目錄! – user999713

+0

'如果svn ls $ REPO/$ directory'只是**可怕的壞和錯誤** - 我有Ns目錄'trunk'形式Ns *不同的回購* –

1

爲什麼不只是使用svn info %directory%?如果目錄沒有被subversion修訂,它將返回!= 0的退出代碼,並且它與WC結構無關。另外,它只適用於你的本地,不需要連接到回購站。

+0

這也檢查目錄是否是'工作副本' - 請閱讀我編輯的問題。 – user999713

2

剛剛遇到同樣的問題。 命令svnlook info和svnlook最年輕(也可能是其他人)給出退出代碼0或1,這取決於提供的目錄是否是Subversion存儲庫。 這適用於SVN回購,而不是user999713聲明的「工作副本」。 所以下面的bash腳本顯示0時目錄是一個SVN回購和1如果不是。

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