4

将分支合并回主树时,是否有某种方法可以强制某些文件不自动合并(强制我管理合并)?

例如,我的 web.config 文件具有基于我是在开发系统还是生产系统中的特定路径。因此,当我需要将我的 dev 分支合并回 main 时,我不想修改某些标签,但可能需要更新其他信息。

问题是合并可能会自动更新需要保持不变的设置。我可以很容易地恢复到原来的状态,但是任何新设置都会丢失。在这种情况下,对我来说,似乎最简单的处理方法是手动合并更改。

由于我是 Tortoise 和 SVN 的新手,因此我可能是从错误的方向来的。

除了下面有一些很好答案的配置示例。有没有办法强制在合并期间手动处理所有文件?似乎应该有一个可以应用于文件的标志,以简单地使其看起来与标记的文件存在冲突并相应地处理合并。

4

3 回答 3

2

我见过的一种处理方法是:

  1. 将您的配置保存在单独的目录中(dev、uat、prod 等)
  2. 将这些签入到 SVN
  3. 修改您的构建过程,以便它根据命令行参数将适当的配置复制到 bin/ 目录中
于 2008-10-23T15:06:45.540 回答
1

我建议根据您的构建或部署过程来查看问题,而不是版本控制过程。

就我个人而言,我已经将 ANT 与平台/环境特定属性一起使用,以允许 SVN(或任何其他 SCMS)中的一个配置文件在本地环境中被覆盖,或者具有在构建期间由平台/环境特定值替换的占位符.

我不相信有一种简单或自动化的方法可以完成您在 TortoiseSVN 中的要求

于 2008-10-23T15:08:28.923 回答
0

如果您不关心共享配置信息(例如数据库访问),您可以轻松地将 dev/prod 特定部分包装在 if->then 中。

if (production) {
   db = prod
} else {
   db = dev
}

我见过一些确定环境的方法,从机器的物理名称(有利于限制未经授权的代码使用)到 IP 地址、主机名等。

提供一点安全性并且不会过多影响构建过程的替代方法是使用分支。将生产 web.config 保存在其自己的具有匹配目录结构的分支中,并将其合并到具有最新生产就绪代码的第三个分支中。所以:

/trunk <-- development (or its own branch)
/branches/
/branches/production-pre <-- latest stable
/branches/production-config <-- web.config and related only
/branches/production-post <-- final merged

是的,它在部署上投入了更多工作,但如果这是所需的效果,它确实提供了安全性。

于 2008-10-23T15:26:15.940 回答