2012-02-12 50 views
4

的文件在“Version Control with Subversion”的Vendor Branches section建立一个供应商分行“的libcomplex”,然后使用下面的命令来的libcomplex复制到主要开发分支:颠覆:只使用一些从供应商分支

$ svn copy http://svn.example.com/repos/vendor/libcomplex/1.0 \ 
      http://svn.example.com/repos/calc/libcomplex  \ 
      -m "bringing libcomplex-1.0 into the main branch" 

但是,如果我们只需要libcomplex的一部分功能(因此也是文件的子集)呢?

将libcomplex的一部分复制到主分支中可以吗?或者这可能会导致问题(特别是在升级libcomplex时)?

+1

除了你只是不想让你的树上的文件有什么其他原因吗?樱桃采摘文件的安装或发布包是一个不同的野兽。 – Manwe 2012-02-19 17:21:16

回答

1

也许解决这个问题的最简单的方法是只将你需要的文件提交到你的仓库中。这使得颠覆方面的问题变得微不足道。如果您可以编写一个脚本从您从供应商处获得的下拉列表中提取需要的库子集,那么整个过程可以自动化。如果提取必须手动完成,这仍然是可行的,但它更烦人一点。无论哪种方式,它很可能会变成维护头痛。第三方库通常不会被分割,所以当库进行任何结构性更改时,您都有可能需要手动进行更改。

完全不同的方法是将库(或其子集)编译为二进制文件,然后仅将该二进制文件提交到源代码树中。这就是我在一个我所从事的项目上所做的。我们为供应商的库提供单独的存储库。一个自定义的生成文件将生成svn://vendor_repo/trunk并生成svn://vendor_repo/trunk/libs(这是与每一个新的下降一起提交),这是我们使用svn:externals拉入我们的主要存储库的这个libs子文件夹。使用这种方法,我们的代码不知道(或关心)这些库是一个子集还是整个库。他们看到的只是一个链接的二进制文件。我们必须手动维护的代码的范围是我们用来构建供应商库的自定义生成文件。

3

我不会推荐分割从其他来源导入的库。

如果libcomplex任何东西,但很平凡,你将会依赖合并+升级梦魇。

0

您使用sparse directories

它更适合目前提取目录而不是单个文件,但假设这是正常的,请使用--depth选项来限制检出的内容量。

+1

OP在分支之间的存储库中进行复制,而不是结帐。 – madth3 2012-02-22 16:30:23