如何强制目录与subversion服务器保持完全同步

时间:2012-04-12 21:42:33

标签: perl svn

我有一个目录结构,其中包含一堆应用程序的配置文件。结构在Subversion中维护,然后一些系统检查了目录结构。开发人员对存储库中的结构进行更改,服务器上的脚本只运行" svn update"周期性。

但是,有时我们会有人无意中删除其中一个目录下的.svn目录,或者粘贴一个不属于该目录的文件。我尽我所能来切断程序不忠的手,但我仍然希望我的更新脚本能够优雅(好,自动)处理这些更改。

所以,我需要的是一种删除不在subversion中的文件的方法,以及一种方法来继续并踩踏一个本地目录,这就像存储库中的东西一样。所以,像

这样的警告
Fetching external item into '/path/to/a/dir'
svn: warning: '/path/to/a/dir' is not a working copy

Fetching external item into '/path/to/another/dir'
svn: warning: Failed to add directory '/path/to/another/dir': an unversioned directory of the same name already exists

应该自动解决。

我担心我必须在脚本中解析svn状态输出,或者使用svn C API并编写我自己的" cleanup"程序使这项工作(是的,它必须以这种方式工作; rsync / tar + scp,以及由于各种原因的其他任何不是选项)。但是,如果有人有解决问题的解决方案(或部分解决方案),我很高兴听到这个问题。 :)

2 个答案:

答案 0 :(得分:0)

怎么样

rm -rf $project
svn checkout svn+ssh://server/usr/local/svn/repos/$project

答案 1 :(得分:0)

我编写了一个perl脚本,首先运行svn cleanup来处理任何锁,然后解析svn status的--xml输出,删除状态不好的任何东西(除了externals,这有点复杂)< / p>

然后我发现了这个: http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean 尽管这并不是我想做的所有事情,但我可能会放弃我的大部分代码,只是稍微增强一点。我的XML解析并不尽如人意,而且我确信这比启动系统命令要快一些(这对于一个非常大的存储库和一个每五分钟运行一次的命令很重要。)

我最终在这个问题的答案中找到了脚本 - Automatically remove Subversion unversioned files - 隐藏在使用Tortoise SVN的所有建议中。