我的团队正在考虑从Clearcase迁移到Subversion,我们正在考虑组织这样的存储库:
\trunk\project1
\trunk\project2
\trunk\project3
\trunk\staticlib1
\trunk\staticlib2
\trunk\staticlib3
\branches\..
\tags\..
这里的问题是我们有很多项目(1000+),每个项目都是一个链接在几个常见静态库中的DLL。因此,检查主干中的所有内容是非启动的,因为它将花费太长时间(~2 GB),并且对于分支来说是笨重的。
使用svn:externals为每个项目提取相关文件夹似乎并不理想,因为它会产生多个工作副本 - 一个用于项目,一个用于每个静态库文件夹。如果更改跨越项目和一些静态库,我们也无法进行原子提交。
稀疏检查听起来非常适合这个,因为我们可以编写一个脚本来只提取所需的目录。但是,当我们想要将分支中的更改合并回主干时,我们需要先检查一个完整的主干。
想知道是否有一些建议:1)更好的存储库组织或2)将分支更改合并到稀疏的主干工作副本的方法?
答案 0 :(得分:3)
关于#2
即使可以使用稀疏检出执行合并,我也不建议这样做。在不完整或浅工作副本中执行的合并会导致创建子树mergeinfo。随着时间的推移,子树mergeinfo会成为一个很大的麻烦。
请参阅:Where Did That Mergeinfo Come From?
我建议始终从源分支的根目录合并到目标分支的完整,干净的工作副本的根目录。在解决任何冲突并完成任何其他必要的验证之后,我将从该工作副本的根目录提交。
如果您是Subversion的新手,我强烈建议阅读重新集成分支,反射合并的内容,以及mergeinfo的工作原理。 Submerged blog有很多很棒的信息,svn book也是如此。