在Subversion中替换整个目录树的最佳方法是什么?

问题描述:

在我的Subversion项目中,我有几个包含我的代码需要的其他开源项目的目录。例如ffmpeg,freetype,matrixssl和其他一些。在Subversion中替换整个目录树的最佳方法是什么?

更新SVN以保存其中一个项目的最新版本的最佳方式是什么?

基本上我会做以下(使用的ffmpeg为例):

1) Rename current ffmpeg folder to ffmpeg.old 
2) Download new version of ffmpeg from net 
3) Make sure it and my code compile and work fine together 
4) Update subversion to now hold the "new" version of ffmpeg 
5) Delete ffmpeg.old directory tree 

你可以看看svnbook谈论vendor branches。这正是您要完成的工作

您可以使用svn_load_dirs.pl替换您的手动步骤1-5。 svn_load_dirs.pl也将跟踪新的,移动或删除的文件。

所有是正确的,只是你不需要的步骤1和5 - 如果第3步失败,用svn revert将改变功能。

+0

此句柄是否会删除不再在新版本中使用的文件,或者我将不得不手动检测并删除它们? – KPexEA 2008-10-10 20:38:54

+0

使用svn删除在下载最新版本之前删除旧树。那么就没有必要解决任何问题,如果第3步失败 - 恢复。无论如何,没有任何东西真正从SVN中删除。 – Dandikas 2008-10-10 20:44:43

+0

svn_load_dirs.pl会照顾已删除的文件 – DanJ 2008-10-10 20:59:44

我想你有两个选择。

A)

  1. SVN删除所有文件。
  2. 获取当前&使它工作。
  3. SVN添加所有文件。

临:如果最新版本中不存在额外的文件,请确保没有额外的文件。答:可能很费时。

B)

  1. 下载并安装新版本过旧。
  2. 让它工作。
  3. SVN添加任何新文件。

专业版:您可以查看该工具文件中发生了哪些变化。

骗局:可能最终会混乱。根据工具覆盖可能导致错误。

+0

在这两种情况下,步骤1的用途是什么?从没有使用SVN的日子听起来,这是一种古老的习惯。 – Dandikas 2008-10-10 20:47:50

我有与CMake的,在这里我把二进制Win32发布住进我们的供应商目录中相同的情况:

branches/ 
trunk/ 
vendor/ 
    cmake/ 
     cmake-2.6.0/ 
     cmake-2.6.1/ 
     cmake-2.6.2/ 
     ... 

然后我使用svn:外部组件来指代CMake的版本我使用。使测试升级到新版本变得非常容易,并且也清楚我正在使用哪个版本的CMake。

如果某些供应商项目也使用Subversion,您可以将 svn:externals属性添加到您的分支/ trunk的父目录。

查看SVN book了解更多详情。