我有一个开发目录,其中包含来自svn存储库的检出项,这些存储库保留在非svn目录中。我想更新svns中的所有dirs。
Dir结构类似于下面的结构:
你会如何解决这个问题?
我带来了“蛮力”解决方案,但它不是很聪明:
for i in `find . -mindepth 1 -maxdepth 3 -type d | grep -v .svn`; do svn up $i; done
如果有这样的话会很高兴:
svn --recursive update development_dir.
答案 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。只要您不更改文件夹名称,这种方法的提交也不会有任何问题。