2

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

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

所以,我需要的是一种删除不在颠覆中的文件的方法,以及一种继续并踩在本地目录上的方法,该目录妨碍存储库中的某些内容。所以,像这样的警告

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 并编写我自己的“清理”程序来完成这项工作(是的,它必须以这种方式工作;rsync / tar + scp,以及由于各种原因而无法选择的任何其他选项)。但是,如果有人有解决该问题的解决方案(或部分解决方案),我将不胜感激。:)

4

2 回答 2

0

怎么样

rm -rf $project
svn checkout svn+ssh://server/usr/local/svn/repos/$project
于 2012-04-12T22:16:31.717 回答
0

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

然后我发现了这个: http: //svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean 即使这不能满足我的所有需求,我可能会丢弃大部分我的代码,只是增强了一点。我的 XML 解析没有想象中的那么漂亮,而且我确信这比启动系统命令要快一些(这对非常大的存储库和每五分钟运行一次的命令很重要)。

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

于 2012-04-15T02:56:22.457 回答