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