svn更新具有多个存储库检出的目录

时间:2010-10-07 13:24:51

标签: svn bash

我有一个开发目录,其中包含来自svn存储库的检出项,这些存储库保留在非svn目录中。我想更新svns中的所有dirs。

Dir结构类似于下面的结构:

alt text

你会如何解决这个问题?

我带来了“蛮力”解决方案,但它不是很聪明:

for i in `find . -mindepth 1 -maxdepth 3 -type d | grep -v .svn`; do svn up $i; done

如果有这样的话会很高兴:

svn --recursive update development_dir.

2 个答案:

答案 0 :(得分:6)

不幸的是,svn不支持此功能。但是,你可以做的是通过消除循环和管道到grep来优化你的命令。该命令应如下所示:

find . -mindepth 1 -maxdepth 3 -name "*.svn" -type d -exec svn up {}/.. \;

为了让生活更轻松,您可以设置Bash别名,例如:

alias svn_up_recursive='find . -mindepth 1 \
-maxdepth 3 -name "*.svn" -type d -exec svn up {}/.. \;'

...并使用svn_up_recursive命令调用整个脚本。或者创建一个shell脚本并将其放入bin目录中。我个人更喜欢shell脚本,因为它更容易支持,扩展它们,处理命令行参数等等。

答案 1 :(得分:0)

如何创建虚拟分支/存储库并将外部设置为所需的分支。这样,顶级的svn update将在所有子文件夹中进行更新。也许你可以跳过非svn目录/文件。

您还可以通过在非svn文件夹中包含.svn / entries文件来欺骗svn,这将是非版本化非svn文件夹的subversion。只要您不更改文件夹名称,这种方法的提交也不会有任何问题。