如何在SVN中存储自定义版本/不同分支?

时间:2013-09-04 12:21:15

标签: svn version-control

我们希望为不同的客户创建我们软件的自定义版本。这些自定义版本可以或多或少地自定义,因此可能有10个更改的文件用于较小的文件,数百个已更改的文件用于较大的文件。 由于可能存在大量自定义版本,因此不希望复制/分支整个项目,而只是将更改的文件添加到自定义版本文件夹。 结构可能如下所示:

standard version:
- foo
  - bar
    - Class1
    - Class2
    - Class3

custom version x:
- foo
  - bar
    - Class1

custom version y:
- foo
  - bar
    - Class2
    - CustomClassY

在构建项目时,我们首先检查标准版本,然后检查自定义版本,用自定义文件覆盖标准文件。然后编译,安装,测试等。

我的问题是:这是一个可用的概念吗?有人部署了吗?有什么障碍?有哪些替代方案?

我想到的一个替代方案是创建传统分支,但定期合并标准版本的更改。也许这可以自动化,因此构建服务器会在进行完整构建之前每晚合并更改?

3 个答案:

答案 0 :(得分:0)

您可以执行此操作,但有一些警告 - 您需要考虑如何处理(例如),删除自定义文件夹中基本版本中的文件。

另一种方法是拥有一堆客户特定目录(在/ customer下)。将'vanilla'版本视为没有增量的客户。然后,您的构建过程将采用基本版本并迭代客户目录,依次构建每个目录。对于奖励积分,您可以查看使用联合文件系统(如aufs),这样您每次都不会刷新基本代码。

或者,您可以将每个客户的更改保存为修补程序文件。这将需要稍微更多的签入/签出工作(除非您使用钩子编写脚本),但应该使更新客户文件的过程更加容易。

答案 1 :(得分:0)

执行使用分支机构,它是它们的一部分。

要记住的重要一点是,为您提供结账your_repository/trunk,然后使用:

svn copy

或者如果您使用TortoiseSVN等客户端,请使用分支/标记选项。

并创建your_repository/branches/customer_name

然后它会创建所谓的 浅层副本 - 它基本上只记录{strong 1 <}> ,它紧挨着 no 空间 - 从那时起,只有分支特定的更改占用任何空间,您可以非常快速地将更改从主干合并到分支中,因为您只需要做任何有关解决冲突的工作。 主干和该分支上已更改的文件。

但是不要让创建分支的人签出your_repository/branches/customer_name = your_repository/trunk@SVN_Rev_number_at_the_time,使用文件资源管理器或其他一些内容从your_repository复制到trunk branches/some_name然后添加到存储库中 - 不要笑我已经让一个开发人员多次执行此操作,即使他已经显示出它造成的混乱。

答案 2 :(得分:0)

虽然我不需要这样的要求,但是如何完全避免分支并将每个客户版本的差异存储为patch文件呢?

然后,您应该能够将每个差异的应用程序合并到构建/发布过程中。例如,如果您有一个CustomerPatches目录,其中包含每个客户的一个补丁文件,您可以迭代每个补丁文件以创建单独的版本。

MrD's对您的问题的评论也是有效的,并且从补丁文件的应用程序生成的任何错误都表明存在构建失败的问题。

显然从长远来看,考虑重构你的申请以避免这种困境:)