3

svn 红皮书的“供应商分支”一章中,建议维护一个 current/ 包含最新版本的 3rd 方产品,因此从示例中我们最终得到:

   repos/vendor/libcomplex/current - contains 1.1
   repos/vendor/libcomplex/1.0
   repos/vendor/libcomplex/1.1 

当前/的目的是什么?为什么我们首先需要将新版本放到 current/ 中,然后才将 current/ 复制到版本专用目录(例如 1.1)中?

我猜它是为了:

  1. 使不同版本的svn具有可比性。
  2. 作为一方面,版本以更有效的方式存储在 svn 存储库中。

我可以绕过供应商分支中当前/的处理吗?

更新:我不打算修补供应商代码(至少这是一个计划)。所以我将使用 svn:external 来使用适当的供应商版本。

4

4 回答 4

3

该供应商分支管理方案的目的是将第 3 方产品的版本放入您的存储库中,以便您在版本之间建立历史记录。如果你只是简单地 import release 1.0 torepos/vendor/libcomplex/1.0和 import release 1.1 to repos/vendor/libcomplex/1.1,那么在 Subversion 1.0 和 1.1 之间将没有历史记录,您将无法在 Subversion 中查看 1.0 和 1.1 之间的更改。当然,您可以检查两者并使用 GNU diff 来比较它们,但在这种情况下您没有利用 Subversion 的强大功能。

如果您正在创建自己的分支并希望将 1.0 和 1.1 之间的更改合并到您的分支中,那么历史记录很重要。如果您希望查看 Subversion 版本 1.0 和 1.1 之间的更改,也可以导入历史记录。最后,拥有历史记录可以更有效地存储数据,因为只存储 1.0 和 1.1 之间的增量。

通过将 1.0 版导入repos/vendor/libcomplex/current然后将 1.1 版添加到同一目录,您可以在 1.0 和 1.1 之间建立历史记录。

于 2010-12-02T17:03:26.613 回答
2

它是必需的,因为使用svn_load_dirs.pl脚本会破坏该目录的内容并将所有内容导入为新的。

不,您不能绕过它,因为它是必要且有用的。

关键在于新供应商删除的目录和文件相对于旧供应商。此脚本处理此将新供应商拖放到当前,然后通过“自动手动”删除每个不再存在的文件/目录。然后合并。

svn_load_dirs.pl

包含多个删除、添加和移动的供应商丢弃使升级到第三方数据的每个后续版本的过程变得复杂

于 2009-09-09T08:46:14.440 回答
2

除了 AlberT 的评论之外,如果您的构建脚本要引用一个您应该始终看到最新供应商代码的区域,那么拥有一个专用目录(当前)也有助于获得一个恒定的路径引用。

于 2009-09-09T08:57:32.623 回答
1

使用 /vendor/current 分支使 /vendor/tag 分支成为纯影子副本。

我还在供应商的主要版本之间将当前分支用于非常小的版本,我认为不需要添加标签。

于 2010-10-22T15:09:38.517 回答