SVN和代码在多个项目之间共享

标签 svn branch

我在 SVN 中有多个项目。这些项目中的每一个都位于其自己的主干中,并进行分支以进行发布。

并且有一个在每个项目中使用的共享代码。问题是处理代码的最佳方法是什么。

让我给出几个场景以及与之相关的问题

a) 将共享代码放在单独的主干(或存储库)中并使用 svn:external。

如果我们对某些项目进行分支,则会出现两个问题:

  • 在主干中对共享代码进行的任何修改都将传播到分支,因为 svn:external 将获取更改
  • 如果我们需要在某个时刻返回并准确构建为发布而构建的代码,我们将很难获得准确的代码,因为 snv:external 将再次获取共享代码的最新副本,而不是项目分支时的代码。

据我了解,有一种解决方法。一旦我们分支,我们就可以修改 svn:external 以获取共享代码的精确版本。然而,这里又存在两个陷阱:

  • 您需要记住每次分支时都执行此操作。 (我讨厌这样的事情,很容易忘记)。
  • 如果您需要对分支/发布的项目进行修补程序,则无法修改共享代码。

b) 另一种解决方案是在项目分支时分支共享代码,并将 external 更改为指向共享代码的分支副本。

  • 同样,问题之一是手动步骤,这很容易忘记
  • 另一个问题是合并问题。当您尝试将项目中的更改合并到主干时,SVN 将跳过外部。因此,开发人员再次需要记住手动合并共享代码。

我错过了什么吗?有什么合理的方法来处理这个问题吗?

最佳答案

我个人保留一个单独的存储库,然后使用[ http://svnbook.red-bean.com/en/1.0/ch07s03.html svn:externals] 属性。

SVN 外部允许您链接到其他存储库(甚至是您不运行的存储库,例如 smarty subversion 存储库),当您运行 svn update 时,您的项目和外部存储库都将更新。

使用 SVN 外部,您还可以使用诸如 http://path-to-project.com/svn/thing -r1234 之类的链接到特定修订版本,以获取版本和您需要保留的其他内容静态

恕我直言,最佳实践是始终指定修订版,然后在对共享库进行更改时更新修订版号,以便您可以跟踪更新此数据的原因。当您标记或分支主项目时,也可以保持一切正常。

关于SVN和代码在多个项目之间共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1638299/

相关文章:

branch - 如何并行运行Web项目的分支?

version-control - 分支和合并策略

eclipse - 如何将多模块 Maven 项目从 SVN 导入到 Eclipse (Indigo) 中,以便可以独立构建子模块?

svn 复制 :how to ignore files not under version control

git - 如何使用 Git SVN fetch 获取单个分支?

git - 确定为什么 github 说 "Closed with unmerged commits"

git - git log --branch 在普通和裸存储库上有不同的行为吗?

svn - 撤消 svn update 设置深度排除

svn - Subversion 供应商分支

SVN新手: quick summary of how to use it?