svn分支的使用场景

时间:2010-04-10 20:16:29

标签: svn branch

我有一个产品可以分发给我的客户。每个客户端都需要一些UI自定义。我希望每个客户都能轻松获得新版本的更新。

我可以在svn中创建一个作为“基础项目”的项目,然后为每个客户创建分支吗?话虽如此,我是否能够将分支中的更改提交到分支,并可以选择将更改推送到核心?我是否还可以在只更新核心更改的分支中执行和“更新”命令?

3 个答案:

答案 0 :(得分:3)

Mahesh有正确的答案,您可以为每个分支创建一个分支,并在您想要发布时将更改从您的主干合并回来。

我会抛弃一些建议:避免这样做!

不可避免地,因为您可以自定义完整代码,所以。即使“UI更改”也可能导致问题 - 如果您在trunk和客户端自定义分支中修改相同的代码段,则会导致在合并时必须手动解决的冲突。随着您的进一步发展,变化将变得越来越复杂,您的分支机构将进一步远离主干,感觉越来越像一个完全不同的产品而不是定制。

考虑一下这个场景:您需要引入一个新功能,或者想要重构一个现有的功能来修复一些错误或者只是让它更容易维护。然而,这种改变将破坏现有代码(例如其他特征)。当你有一个代码库时,至少你可以看到它将在哪里中断,以及你需要做些什么来解决它。如果您有多个自定义的分支,则无法进行该可视化。


更好的选择是仔细查看您需要为所有这些客户端执行的操作,并构建一个框架以允许这些自定义,同时仍保留一个代码库。

如果您只想更改标题栏中的名称和几个图像,只需创建一个允许您指定这些内容的配置文件(.ini,或XML等)。您的应用程序在启动时读取它。现在您有一个代码库,您只需在部署期间为任何客户端换出自定义文件。

如果您需要自定义GUI的布局(通常称为“皮肤”),可以使用预构建的框架来帮助实现。

在频谱的最后,如果您真的需要提供代码自定义,请使用插件架构来实现。构建提供基本API的接口,然后为每个客户端构建一个自定义库,该库实现该接口,但每个客户端都有自定义部件。您可以在库中放置控件,代码逻辑等。

详细信息超出了这个问题的范围,但你可以做很多事情,而不必解决(大多数)相同代码的多个副本将引入的问题。

答案 1 :(得分:2)

是的,你可以用svn!

做你提到的所有事情

您可以将分支“合并”到核心,指定要合并到主干(核心)的开始和结束修订号。

分支与主干(核心)分开,因此当您提交分支时,更改只驻留在分支中,除非您明确地将其合并到主干。

答案 2 :(得分:0)

到目前为止,我所看到的命名法是有3个基本目录:

  • trunk:你的核心
  • 分支机构:所有工作分支
  • 标签(或发行版):所有不同的版本发布。基本上,你给客户的一切都应该在那里。

此用法不会使服务器过载:相同的文件保留一次,而不是每个分支一个。当您更新时,这对您来说是透明的。

当您需要对主干进行一些更改时,首先将主干合并到您的分支上(以确保您拥有最新的主干),然后将分支合并到主干上。 (确保在此过程中无意中删除了任何内容)。