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

时间:2008-10-10 20:26:05

标签: svn replace directory

在我的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

5 个答案:

答案 0 :(得分:11)

你可以看看svnbook谈论vendor branches。这正是你想要完成的事情

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我认为你有两种选择。

<强> A)

  1. SVN删除所有文件。
  2. 获取最新信息让它发挥作用。
  3. SVN添加所有文件。
  4. Pro:如果最新版本中没有额外文件,将确保不会保留额外文件。

    骗局:可能很费时间。

    <强> B)

    1. 下载旧版本并安装新版本。
    2. 让它发挥作用。
    3. SVN添加任何新文件。
    4. Pro:您可以看到该工具文件中的更改内容。

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

答案 4 :(得分:0)

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

请查看SVN book了解详情。