2

我们将 Mercurial 用于 .Net Mvc 应用程序。当我们合并我们的分支时,我们面临的问题是在 web.config 中我们有一个不同的连接字符串

例如

connectionString="data source=Dev1\MSSQLSERVER2012;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf; User ID=sa; Password=pass1

第二个 web.config

connectionString="data source=Dev2\MSSQLSERVER2012;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf; User ID=sa; Password=pass2

等等

我们如何在不一次又一次地编辑和重写配置的情况下合并我们的配置。只是忽略 web.config 文件没有帮助。Mercurial 是否有“忽略文件部分”选项?

4

3 回答 3

2

我有同样的情况:我想阻止传播的本地配置,但我希望能够推送和拉取相同的文件。我没有弄乱补丁,而是按如下方式进行:

假设常规发生在分支中default(可能有多个分支;这只是为了具体化)。

  1. 更新到干净的最新版本default,没有配置状态。
  2. 创建一个新分支,local. 在此分支中,将所有本地配置提交为一个或多个变更集。
  3. 在 的顶端local,创建一个新的分支,dev。在这里开发您的新功能。

    你的历史现在看起来像这样:

    ...o--o      (default)
           \
            L--L    (local)
                \
                 d--d--d  (dev)
    
  4. 当您准备好推送时,将整个dev分支重新定位到default

    hg rebase --source "min(branch('dev'))" --dest default --detach
    

    如果您的功能有自己想要保留的分支名称,请添加--keepbranchesrebase选项中。之前的树变成:

    ...o--o--d--d--d   (default)
           \
            L--L    (local)
    
  5. 您现在可以发布新功能,push -r default而无需拖动本地修订。(永远不要从local into default合并;反之亦然)。如果你在推送时忘记说-r default,没问题:你的推送被拒绝,因为它会添加一个新的头部。

  6. 仍在开发服务器上,将重新定位的 rev 合并为local

    ...o--o--d--d--d   (default)
           \        \
            L--L-----N    (local)
    
  7. 您现在可以dev在 之上创建一个新分支local,并继续开发。

这样我的本地配置就在源代码控制下;如果它与新功能冲突,我可以像任何其他合并一样解决它。如果出现问题,我可以更新回配置的旧版本。

我的案例还涉及在修订管理下配置的克隆。您可以在此答案中看到完整的解决方案。

于 2012-12-23T13:15:19.250 回答
1

使用MQ并创建(一个或两个)补丁,将两个分支的相同、通用的vanilla web.config 转换为特定于分支的状态

于 2012-12-21T18:02:05.403 回答
1

不是 Mercurial 答案,但您不能更改连接字符串来引用localhost而不是Dev1andDev2吗?您还需要更改为 Windows 身份验证,以便您不需要在配置文件中设置密码。

这就是我们在团队中的做法,我们从来没有遇到任何问题。

于 2012-12-17T19:09:20.123 回答