我正在将客户端的SourceSafe存储库(3个项目)迁移到SVN,其中两个项目共享源文件.(这些项目是单独的产品 - 具有不同的名称和发布版本等)
SVN解决了这个缺点吗?人们通常如何处理这种情况?
我知道/可以想到的选项
使用外部或外部或任何SVN.我听说由于各种原因这不是一个好的选择
创建一个包含源的新项目(可能称为共享).这个问题是我们仍然需要获取该代码(它不是一个库)并以某种方式将其导入项目中.可以证明它与上面的问题相同,并且它引入了额外产品/项目的开销.
只需签入两个存储库中的文件并交叉更新它们即可.这需要开发人员了解共享并记住签入.我想我可以编写一个脚本来检查所有已知的共享文件,并在需要时更新它们.
为共享的两个项目提供一个存储库.这让我不得不创建一个包含两者的顶级项目/存储库的问题,这是标记的问题.我真的不想标记顶部的伪项目.(标签,行李箱和分支机构并不是我想要它们的地方.)
我可能会选择最后一个选项.
还有其他意见吗?
我不知道你究竟听说过svn:externals,但我认为你应该在这里使用它.您甚至可以指定外部指向共享源的稳定分支或发布标记,甚至指向使用它的其他两个项目中的两个不同的标记(如果您在共享代码中修复了一些错误,可能需要这样做对于项目A,但您没有足够的时间用项目B)完全测试它.
您可以做的最糟糕的事情是您的选项3(交叉更新相同文件的两个版本).
安全的方法是让第三个项目将共享源构建到另外两个使用的库中.库项目有自己的SVN存储库.
您甚至可以使用只是标题的共享文件来执行此操作,只需将它们保留在lib项目目录中,然后将其添加到包含列表中.
在两个项目中拥有相同的文件,即使有了控制权,迟早也会遇到麻烦!
万一有人发问这个问题,想知道您如何用TortoiseSVN引入外部资源,那么这里的文档是:
包括一个共同的子项目
外部物品