设置subversion以使用供应商分支时的最佳做法是什么?我们的存储库是针对单个项目构建的我们使用的是subversion 1.6.2和tortoiseSVN 1.6.3。
示例文件夹结构:
Project1
/tags
/branches
/trunk
Project2
/tags
/branches
/trunk
答案 0 :(得分:13)
Subversion手册中有一节专门针对Vendor Branches。
基本思路是将未修改的当前版本通过一组跟踪外部更改的文件夹导入存储库(只是外部更改,而不是对其的修改)。像“... / repos / vendor /(software)/ current”之类的东西。然后立即分支到“... / repos / vendor /(software)/(software-version)”。随着新版本的发布,更新“当前”目录并创建一个新分支,例如“... / repos / vendor /(software)/(next-version)”。这使得你(和svn)可以在未修改的源上做差异,以获得外部更改的内容。
对于软件的修改,将“(软件版本)”分支到您自己的项目中,例如“... / repos /(my-project)/ trunk /(software)”。当您升级到第三方源的下一版本时,告诉svn将“(软件版本)”和“(下一版本)”之间的差异合并到“trunk /(software)”的工作副本中。这会将所有外部更改拉入主干,整齐地升级项目源。正常分支和标记项目。
Subversion发行版包含一个名为“svn_load_dirs.pl”的Perl脚本,在升级“供应商”项目时可以提供帮助。它会发现已删除,添加和重命名的文件,并根据需要修改您的工作副本,例如“(当前)”。
答案 1 :(得分:3)
对于稍后来到这里的人来说,值得一提的是,从SVN版本1.8开始,詹姆斯对此问题的回答中描述的处理供应商分支的文档化方法已经改变。
在撰写本文时,新文档仍在最终确定中,以查看SVN书籍第4章的“供应商分支”部分:http://svnbook.red-bean.com/nightly/en/svn.advanced.vendorbr.html。请注意该页面顶部的警告是正在进行的文档。
答案 2 :(得分:0)
你说的是真的,但在实践中你会看到一个非常大的问题。
当您将供应商项目导入您的subversion存储库时(并且使用供应商项目这是一个很大的问题,比如apache httpd 2.2),您会发现无法导入每个目录上的svn:ignore属性,因为事实上,没有任何导出工具只能通过访问WebDAV接口来执行此操作(有svn管理工具可以导出svn道具但需要直接访问供应商存储库)。
因此,当您导入供应商项目时,您必须首先从供应商svn存储库导出原始项目,并在将文件导入到您的svn后,您将为项目内的每个目录手动设置svn道具。如果你真的想要修改供应商项目并跟上他们的修改,那么这是一个非常有意义的方法,但却是唯一的方法。