【问题标题】:Best practice with .gitignore for connection strings inside App.config or Web.config.gitignore 用于 App.config 或 Web.config 中的连接字符串的最佳实践
【发布时间】:2013-10-29 10:30:16
【问题描述】:

在大型团队工作时,我尝试了几种使用 *.gitignore 管理连接字符串的方法。

gitignore.gitignore 文件的官方存储库中,我下载了VisualStudio.gitignore 并将其用作所有项目的起点。

同样的过程可以通过访问http://gitignore.io/,输入VisualStudio,然后下载文件来完成。

我目前使用的方法是利用SectionInformation.ConfigSource Property

<connectionStrings configSource="myConnectionStrings.config" />

然后将 myConnectionStrings.config 添加到 .gitignore,这很好,因为它不会添加整个 *.config

您也可以在另一个项目(您的 MyProject.Data 层)中使用相同的 myConnectionStrings.config

<configuration>
  <connectionStrings configSource="myConnectionStrings.config"/>
</configuration>

记得设置始终复制

我也尝试过使用filters ,如Git - Ignoring a specific modification to a config file 所述,但我发现这有点过头了。

我想知道是否还有其他被认为是最佳实践的方法?

【问题讨论】:

  • 我在一家完全按照您描述的方式工作的公司工作。我认为 configsource 属性就是为此而设计的,所以我认为你的实现很到位。
  • @CarllDev 感谢您抽出宝贵时间发布反馈。
  • 就像@CarlDev 所说,你一针见血。 :) 这是最好的方法。
  • 这个链接,Keep Private Settings Out of Source Control,对我也很有帮助,提到了上面的方法,以及其他一些选项。
  • @CarllDev 从网上下载文件并向其中添加字符串不是“实现”(我喜欢回到这篇文章,哈哈)。

标签: visual-studio-2010 git connection-string gitignore


【解决方案1】:

我不能代表你的设置,但这就是我解决这个问题的方法。

首先,我团队中的所有人员都使用本地数据库,并将集成安全设置为 true。这意味着当我们从源代码管理中签出文件时,最好使用本地设置。所以我的 Web 配置文件看起来像这样

<add name="appConnString"
   connectionString="Data Source=(local);Initial Catalog=MyDatabaseName;Integrated Security=True;"
   providerName="System.Data.SqlClient" />

关于部署到不同的环境,您的第一个选择是使用转换。如果你不知道那是什么,read here

由于我们使用 Octopus Deploy 作为我们的部署工具,因此我们的转换文件具有“web.release.config”的连接字符串,如下所示

<add name="appConnString"
   connectionString="{{appConnString}}"
   xdt:Transform="Update" 
   xdt:Locator="Match(name)" />

当 Octopus 运行时,它会抓取 web.config 并使用发布文件覆盖相关部分。然后根据我要部署到的环境/机器/分支,它将 {{appConnString}} 替换为已为该部署设置的配置。

我确信 Visual Studio 的过程几乎相同。

如果您不喜欢转换过程。您还可以使用 parameters.xml 文件。 msdepoy 在构建时使用此文件替换 web.config 中的值。你可以阅读更多关于它的信息here

另一个考虑因素是,如果您使用 Azure 进行托管,您可以在各种部署槽上设置某些配置替换,直至生产。

这些只是我使用过并看到非常有效使用的一些技术。有些人需要一点时间来适应,而且设置起来也很沮丧,但从长远来看,拥有一个合适的部署系统会有所回报。

【讨论】:

    【解决方案2】:

    也许有点自以为是,我认为不需要策略 来将shell glob 添加到文件中。在阅读此问题之前,我从未听说过“connectionStrings”,但据我所知,它们拥有各种后端的 URI / 凭据。

    后端多久更换一次?更好的是,配置文件的路径多久更改一次? 可能不够频繁,不足以保证政策。您唯一需要的是命名包含这些连接字符串的配置文件的约定,以便使用自动化工具轻松识别它们。

    因此,请使用您的工具或编写脚本并将 &lt;connectionStrings configSource="foobarService.config" /&gt; 中的 foobarService.config 附加到所有后端的 .gitignore 文件中。

    1。找到文件。

    $ find -name cs.xml
    
    ./more/configs/here/cs.xml
    ./cs.xml
    ./some/sub/folder/cs.xml
    

    2。获取配置文件名

    $ find -name cs.xml | xargs grep -ho '[^"]\+\.config'
    
    getImagesService.config
    users.config
    ldap.config
    foobar2k.config
    ratpoison.config
    moo.config
    foo.config
    trololol.config
    moreconfigz.config
    myConnectionStrings.config
    data.config
    base.config
    filebackend.config
    offsitewhatever.config
    

    3。忽略他们

    $ find -name cs.xml | xargs grep -ho '[^"]\+\.config' >> .gitignore
    

    4。更新你的简历

    • 2014 年 3 月 - connectionString 策略的首席设计师

    我很困惑,有人会询问有关管理 .gitignore 文件的建议。这可能表明我没有看到大局。您能否用一些背景信息更新您的问题?我很好奇为什么这是一个有意义的问题,因为我很难理解有必要建立最佳实践来将字符串附加到文件。

    【讨论】:

    • 最好只是规定必须始终调用带有凭据的文件,好吧FileThatContainsSomeSecret.credentials 或类似的,并将*.credentials 添加到您的.gitignore。问题永远解决了。我获得了终极凭证管理元政策的创造者的崇高称号。
    • 很高兴您通过阅读问题学到了一些东西。我没有问如何管理 .gitignore 文件,而是如何管理连接字符串,特别是在 VisualStudio 的情况下。如果您不理解这个问题,请不要用您的讽刺/讽刺回答来成为一个巨魔。
    • @Ярослав Рахматуллин 后端多久更改一次? 在某些情况下很常见。我有一个数据库 .\mssql2014 的命名实例,而我的同事将它作为默认的 . (点)。团队中有30名优秀的人。现在有时优秀的人会犯错误并提交他们的配置。周五晚上,有人花了 30 分钟试图了解为什么某些功能会引发 SQLException
    • 将配置添加到 .gitignore。仍然不需要政策。
    • @Ярослав Рахматуллин 好的,已添加。明天我们的团队扩大到 100 人。他们提取代码,但 .config 不存在。除了连接字符串之外,还有很多东西。 USB 记忆棒可以救场吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2013-03-04
    • 2017-09-07
    • 2010-10-11
    • 1970-01-01
    • 2014-04-01
    相关资源
    最近更新 更多