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

Vic*_*nin 25 svn branch

我在SVN有多个项目.这些项目中的每一个都位于它自己的主干中,并为发布分支.

每个项目都有一个共享代码.问题是处理代码的最佳方法是什么.

让我举几个场景以及与它们相关的问题

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

如果我们分支一些项目,将会有两个问题:

  • 在trunk中进行的共享代码的任何修改都将传播到分支,因为svn:external将获取更改
  • 如果我们需要在某个时刻返回并构建完全构建用于发布的代码,那么我们将很难获得确切的代码,因为snv:external将再次获取共享代码的最新副本,而不是在项目受到影响时的代码.

据我所知,有一项工作.一旦我们分支,我们就可以修改svn:external来获取共享代码的精确修订版.然而,还有两个陷阱:

  • 每次分支时都需要记住这样做.(我讨厌这些容易忘记的事情).
  • 如果需要为分支/已发布项目执行修补程序,则无法修改共享代码.

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

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

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

Mik*_*tar 13

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

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

使用SVN外部,您还可以使用某些版本链接到特定修订http://path-to-project.com/svn/thing -r1234版本,例如发布版本以及保持静态所需的其他内容

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

  • 这确实是一个很好的做法!或者在可能的情况下,指向svn:external链接中的其他存储库的标记(这应该保证不变性,并且更容易根据使用的版本来解释). (2认同)