|
|
1
14
Subversion手册中有一节专门介绍 Vendor Branches . 基本思想是,您可以通过一组跟踪外部更改(仅是外部更改,而不是您对其的修改)的文件夹将当前版本(未经修改)导入存储库。类似于“…/rerepos/vendor/(软件)/current”。然后立即分支到“…/rerepos/vendor/(软件)/(软件版本)”。随着新版本的发布,更新“当前”目录并创建一个新的分支,例如“…/rerepos/vendor/(软件)/(下一个版本)”。这允许您(和svn)对未修改的源代码进行差异处理,以得出外部更改的内容。 对于您对软件的修改,将“(软件版本)”分支到您自己的项目中,类似于“…/rerepo/(我的项目)/trunk/(软件)”。当你升级到第三方源代码的下一个版本时,告诉svn将“(软件版本)”和“(下一版本)”之间的差异合并到“trunk/(软件)”的工作副本中。这会将所有外部更改拉到主干中,从而整齐地升级项目源代码。将项目分支并标记为正常。 Subversion发行版包含一个名为“svn_load_dirs.pl”的Perl脚本,它可以在升级“vendor”项目时提供帮助。它会发现已删除、添加和重命名的文件,并根据需要修改您的工作副本,例如“(当前)”。 |
|
2
4
对于以后会讨论这个问题的人来说,值得知道的是,从SVN 1.8版本开始,James对这个问题的回答中描述的处理供应商分支的记录方法已经发生了变化。 在撰写本文时,新的文件仍在定稿中,请参阅SVN手册第4章的供应商分支部分: http://svnbook.red-bean.com/nightly/en/svn.advanced.vendorbr.html 。请注意该页顶部的警告,说明文档正在处理中。 |
|
|
3
0
你说的是真的,但在实践中你会看到一个很大的问题。 当你将供应商项目导入到你的subversion存储库中时(并假设供应商项目是一个大项目,比如apache httpd 2.2),你会发现不可能导入svn:ignore每个目录上的属性,因为没有任何导出工具只能通过访问WebDAV接口来实现这一点(有svn管理工具可以导出svn props,但需要直接访问供应商存储库)。 因此,当您导入供应商项目时,您必须首先从供应商svn存储库导出原始项目,并在将文件导入svn后,为项目中的每个目录手动设置svn props。这是一种非常繁琐的方法,但如果你真的想修改供应商项目并跟上他们的修改,这是唯一的一种方法。 |