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