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


在我的Subversion项目中,我有一些目录,其中包含我的代码所需的其他开源项目。例如ffmpeg,freetype,matrixssl和其他一些。

更新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

4804
2017-10-10 20:26


起源



答案:


你可以看看svnbook谈论 供应商分支。这正是您尝试完成的任务

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


11
2017-10-10 20:45





我和CMake有相同的情况,我将二进制win32版本保存到我们的供应商目录中:

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

然后我使用svn:externals来引用我正在使用的CMake版本。使测试升级到新版本变得非常容易,而且我也清楚使用哪个版本的CMake。


2
2017-10-10 20:36



所以基本上svn项目包含所有版本,你只是当前版本的别名? - KPexEA
是。没有必要删除旧的,因为供应商目录永远不会被直接检出;它仅使用svn:externals引用。 - JesperE


答案:


你可以看看svnbook谈论 供应商分支。这正是您尝试完成的任务

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


11
2017-10-10 20:45





我和CMake有相同的情况,我将二进制win32版本保存到我们的供应商目录中:

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

然后我使用svn:externals来引用我正在使用的CMake版本。使测试升级到新版本变得非常容易,而且我也清楚使用哪个版本的CMake。


2
2017-10-10 20:36



所以基本上svn项目包含所有版本,你只是当前版本的别名? - KPexEA
是。没有必要删除旧的,因为供应商目录永远不会被直接检出;它仅使用svn:externals引用。 - JesperE


一切都是正确的,除了您不需要步骤1和5 - 如果步骤3失败,则使用svn还原功能还原更改。


1
2017-10-10 20:31



这会处理删除新版本中不再使用的文件,还是必须手动检测和删除它们? - KPexEA
在下载最新版本之前使用svn delete删除旧树。然后没有必要解决任何问题,如果步骤3失败 - 恢复。无论如何,没有什么能真正从SVN中删除。 - Dandikas
svn_load_dirs.pl将处理已删除的文件 - DanJ


我想你有两个选择。

一个)

  1. SVN删除所有文件。
  2. 获取最新信息并使其发挥作用。
  3. SVN添加所有文件。

Pro:如果最新版本中没有多余文件,请确保不会保留额外文件。

骗局:可能很费时间。

B)

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

Pro:您可以看到该工具文件中的更改内容。

骗局:最终会变得杂乱无章。根据工具覆盖可能会导致错误。


0
2017-10-10 20:33



在两种情况下,步骤1的用途是什么?从你没有使用SVN的日子开始,这听起来像是一种旧习惯。 - Dandikas
修好了。我太过分了 - Tilendor


如果某些供应商项目也使用Subversion,您可以添加 该 SVN:外部组件 属性到您的分支/主干的父目录。

看看吧 SVN书 更多细节。


0
2017-10-11 06:37



没错,但这会让您受到供应商存储库的支配。见答案 stackoverflow.com/questions/192915/... 它描述了供应商分支,用于更受控制的方法。 - Martijn Heemels