Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
svn使用多存储库签出更新目录_Svn_Bash - Fatal编程技术网

svn使用多存储库签出更新目录

svn使用多存储库签出更新目录,svn,bash,Svn,Bash,我有一个开发目录,其中包含来自svn存储库的签出,这些存储库位于非svn目录中。我想更新SVN中的所有目录 Dir结构类似于下面的结构: 你将如何解决这个问题 我带来了“暴力”解决方案,但它不是很聪明: for i in `find . -mindepth 1 -maxdepth 3 -type d | grep -v .svn`; do svn up $i; done 如果有你喜欢的东西,那就太好了: svn --recursive update development_dir. 不幸的

我有一个开发目录,其中包含来自svn存储库的签出,这些存储库位于非svn目录中。我想更新SVN中的所有目录

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

你将如何解决这个问题

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

for i in `find . -mindepth 1 -maxdepth 3 -type d | grep -v .svn`; do svn up $i; done
如果有你喜欢的东西,那就太好了:

svn --recursive update development_dir.

不幸的是,svn不支持此功能。然而,您可以做的是通过消除for循环和到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\u up\u recursive
命令调用整个脚本。或者创建一个shell脚本并将其放入
bin
目录中。我个人更喜欢shell脚本,因为它更容易支持、扩展、处理命令行参数等等。

不幸的是,svn不支持此功能。然而,您可以做的是通过消除for循环和到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\u up\u recursive
命令调用整个脚本。或者创建一个shell脚本并将其放入
bin
目录中。我个人更喜欢shell脚本,因为它更容易支持、扩展它们、处理命令行参数等等。

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


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

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


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

我看不出您的解决方案有任何问题。它可以工作,既然您没有开发一个完整的svn客户端,为什么还要麻烦呢?有一个包含不同源存储库的目录的列表不是更容易吗。他们不是经常改变的,是吗?然后您可以简单地使用存储库执行
cat file_ | xargs svn up
我看不出您的解决方案有任何问题。它可以工作,既然您没有开发一个完整的svn客户端,为什么还要麻烦呢?有一个包含不同源存储库的目录的列表不是更容易吗。他们不是经常改变的,是吗?然后,您可以简单地使用存储库执行
cat file_ | xargs svn up
我认为这是一个无功能,因为签入是原子操作,您如何处理不同存储库的签入失败?您是否需要恢复已成功的?如果恢复失败怎么办?:)我认为这是一个没有特性的特性,因为签入是原子操作,您如何处理不同存储库的签入失败?您是否需要恢复已成功的?如果恢复失败怎么办?:)