svn 2个同一个项目的最佳方法是什么?

时间:2011-12-27 14:30:33

标签: svn

我正在开发一个在两个地方运行的项目,一个在活动服务器上,另一个在本地测试环境中。这两个副本仅在一些配置文件(存储名称,URL,数据库信息等)方面有所不同。

现在我这样工作:

  1. 对本地副本进行一些编辑,在本地测试环境中测试新版本,如果一切正常,svn commit;

  2. 转到服务器,svn更新,手动解决冲突 - 但是有很多编辑,因为许多配置项在两个副本之间有所不同...而且我不想简单地接受mc,因为配置文件可能会有一些变化......

  3. 现在我想将配置文件的两个副本保存在repo中,在我的本地副本中来回切换文件名,所以在更新服务器副本时我不需要处理冲突。有没有更聪明的方法呢?

4 个答案:

答案 0 :(得分:2)

您可以保留两个不同的文件,并使用其中一个文件的符号链接。

project
  |-configuration
  |  |-development.cfg
  |  \-production.cfg
  \-config.cfg < symbolic link to configuration/development.cfg

首次结帐时,您必须创建指向其中一个文件的符号链接。

答案 1 :(得分:1)

创建三个配置文件:

  • 共同
  • 测试
  • 生产

更改配置阅读器,使其可以读取多个文件(以后的文件中的选项会覆盖之前的文件)。

这允许您拆分配置(您可以在开发机器上准备生产配置,甚至可以在那里进行测试)。

现在您只需要添加一个可选的命令行选项。如果选项存在,则读取公共+生产配置。如果缺少(在开发期间),则使用common + test配置。

答案 2 :(得分:0)

您应该尽可能多地保留JNDI命名资源的资源。您可以在不同值前面使用相同的JNDI名称配置测试和prod服务器。您的应用不必改变这种方式。

我使用环境变量或标志来告诉应用程序使用哪种版本的配置。

答案 3 :(得分:0)

  1. 如果您为两个服务器使用一个存储库位置,您可以考虑在单个存储库中拆分为两个(分支),稍后在分支之间合并更改
  2. 对于分支中的配置文件,您可以考虑(?)将配置移动到单独的目录中,将此目录定义为父repo的外部,并在svn中使用 relative(非绝对)路径:externals < strong>或为外部的常见URL指定不同的PEG修订版(已准备好)