svn使用多存储库签出更新目录
我有一个开发目录,其中包含来自svn存储库的签出,这些存储库位于非svn目录中。我想更新SVN中的所有目录 Dir结构类似于下面的结构: 你将如何解决这个问题 我带来了“暴力”解决方案,但它不是很聪明: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. 不幸的
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
我认为这是一个无功能,因为签入是原子操作,您如何处理不同存储库的签入失败?您是否需要恢复已成功的?如果恢复失败怎么办?:)我认为这是一个没有特性的特性,因为签入是原子操作,您如何处理不同存储库的签入失败?您是否需要恢复已成功的?如果恢复失败怎么办?:)