我们在不同的办公室有多个开发团队,他们需要为我们项目web.config
和app.config
文件中的许多配置设置不同的值。
我们喜欢使用一组合理的默认值来检查这些配置文件,这样通过检查主干/主分支,您就可以在不需要四处寻找配置文件的情况下工作。
从历史上看,我们使用过 Subversion,特别是 TortoiseSVN,这为管理本地更改提供了一种简单的方法:我们只需将这些文件添加到 TortoiseSVN 的自动更改ignore-on-commit
列表中。这可以防止意外签入这些文件,因为您随后需要专门选择它们以将它们包含在签入中(并且您可以确保您正在签入重大更改,而不是本地配置噪音)。这种方法的主要缺点是配置文件总是看起来“更改”,因此不可能一目了然地知道您是否有任何本地更改。
我们正在寻求切换到 Git,我正在尝试找出最佳方法。
首先,其他 StackOverflow 答案中已有的内容:
选项 1:签入 xxx.sample 文件和 .gitignore 实际配置文件:例如,在此答案中建议这样做。我看到的主要问题是配置文件的更改很容易被遗忘,有两个不同的点:提交者很容易错过他们需要添加到.sample
文件中的更改,而消费者(尤其是持续集成服务器)很容易错过他们需要将.sample
文件中的更改合并到本地配置文件中。所以基本上,这似乎不是一个很好的解决方案。
选项 2:有一个签入的 xxx.defaults 文件和一个 .gitignored xxx.local 配置文件,它会覆盖它定义的任何设置:这是提供的,例如,here。问题在于我们正在与标准的 .Net 配置提供程序合作——我真的不希望我们在 Mirosoft 已经完成所有工作时实现一个全新的设置加载框架。有谁知道获取 app.config 和 web.config 文件以引用可选本地覆盖文件的方法?
选项 3:让开发人员保留本地分支,然后让他们始终将cherry-picks 或 rebase 分支签入主分支,以始终绕过/避免本地分支中不需要的提交:这在此处作为可能的工作流程提供,而我欣赏它在更改跟踪(所有签入)方面的简洁性,它在每次签入时都会引入大量所需的开销;这是一个很大的痛苦!
选项 4:已签入配置文件,但将它们标记为: 这是--assume-unchanged
此处提供的一个可能选项;据我所知,它在本质上与ignore-on-commit
TortoiseSVN 中的更改列表非常相似,只是在提交过程中您无法看到这些“隐藏”的更改文件;例如,TortoiseGit 确实显示带有“已更改”图标覆盖的文件,但在提交对话框中该文件根本不显示。这似乎有点吓人,又很容易忘记检查更改。
鉴于这些选项,这是我找到的所有选项,我真的希望有一种方法可以选择将本地配置文件“包含”到/覆盖签入的 app.config/web.config 文件并使用选项2 ; 有谁知道这样做的方法,或者我缺少的其他选项?(我有点想考虑一个自定义的 Xml 合并预构建步骤......)
我应该在前面提到,我们仍然在 VS2008 上,所以配置转换不可用。
更新:(已删除,完全错误)
更新 2:我已经删除了我之前的更新和答案,这很愚蠢/没有用。我没有意识到在“我们的”合并之后,另一个方向的下一次合并会将这些文件的“原始”版本带回(覆盖本地分支更改);如果您有兴趣,请参阅编辑历史。这个问题一如既往的开放。