我们希望为不同的客户创建我们软件的自定义版本。这些自定义版本可以或多或少地自定义,因此可能有10个更改的文件用于较小的文件,数百个已更改的文件用于较大的文件。 由于可能存在大量自定义版本,因此不希望复制/分支整个项目,而只是将更改的文件添加到自定义版本文件夹。 结构可能如下所示:
standard version:
- foo
- bar
- Class1
- Class2
- Class3
custom version x:
- foo
- bar
- Class1
custom version y:
- foo
- bar
- Class2
- CustomClassY
在构建项目时,我们首先检查标准版本,然后检查自定义版本,用自定义文件覆盖标准文件。然后编译,安装,测试等。
我的问题是:这是一个可用的概念吗?有人部署了吗?有什么障碍?有哪些替代方案?
我想到的一个替代方案是创建传统分支,但定期合并标准版本的更改。也许这可以自动化,因此构建服务器会在进行完整构建之前每晚合并更改?
答案 0 :(得分:0)
您可以执行此操作,但有一些警告 - 您需要考虑如何处理(例如),删除自定义文件夹中基本版本中的文件。
另一种方法是拥有一堆客户特定目录(在/ customer下)。将'vanilla'版本视为没有增量的客户。然后,您的构建过程将采用基本版本并迭代客户目录,依次构建每个目录。对于奖励积分,您可以查看使用联合文件系统(如aufs),这样您每次都不会刷新基本代码。
或者,您可以将每个客户的更改保存为修补程序文件。这将需要稍微更多的签入/签出工作(除非您使用钩子编写脚本),但应该使更新客户文件的过程更加容易。
答案 1 :(得分:0)
执行使用分支机构,它是它们的一部分。
要记住的重要一点是,为您提供结账your_repository/trunk
,然后使用:
svn copy
或者如果您使用TortoiseSVN等客户端,请使用分支/标记选项。
并创建your_repository/branches/customer_name
。
然后它会创建所谓的 浅层副本 - 它基本上只记录{strong 1 <}> ,它紧挨着 no 存储库中的strong>空间 - 从那时起,只有分支特定的更改占用任何空间,您可以非常快速地将更改从主干合并到分支中,因为您只需要做任何有关解决冲突的工作。 主干和该分支上已更改的文件。
但是不要让创建分支的人签出your_repository/branches/customer_name = your_repository/trunk@SVN_Rev_number_at_the_time
,使用文件资源管理器或其他一些内容从your_repository
复制到trunk
branches/some_name
然后将添加到存储库中 - 不要笑我已经让一个开发人员多次执行此操作,即使他已经显示出它造成的混乱。
答案 2 :(得分:0)