.gitignore最佳实践:如何忽略App.config或Web.config中的连接字符串

30

我尝试过多种方法使用*.gitignore来管理在大团队中工作时的连接字符串。

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

可以通过访问http://gitignore.io/网站,输入"VisualStudio",然后下载文件来执行相同的过程。

enter image description here

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

<connectionStrings configSource="myConnectionStrings.config" />

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

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

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

记得设置 始终复制

enter image description here

我还尝试使用过滤器,如在 Git - 忽略对配置文件的特定修改中所述,但我发现这有点过了。

不知道还有没有其他被认为是最佳实践的方法呢?


5
我曾在一家公司工作,他们的做法与你描述的完全一致。我认为configsource属性就是为此设计的,所以我认为你的实现方法非常正确。 - CarllDev
@CarllDev,感谢您抽出时间发表反馈。 - Matija Grcic
就像@CarlDev说的那样,你说得很对。 :) 这是做这件事情的最佳方式。 - Granville Schmidt
2
这个链接将私有设置从源代码控制中排除真的帮了我很多,它提到了上面的方法,以及其他一些选项。 - BMB
哥们,这个主意真不错,我之前在一个大项目中也看到过,但从未想过可以这样做,而且伙计们)不需要帮助就能切换环境以避免造成损害。顺便说一下,你还可以将appSettings放在configFile之外: <connectionStrings configSource="Configuration\connectionStrings.config"></connectionStrings> <appSettings configSource="Configuration\appSettings.config"></appSettings>祝好 :) - NFRiaCowboy
显示剩余3条评论
2个回答

1

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

首先,我的团队中所有人都使用启用了集成安全性的本地数据库。这意味着当我们从源代码控制中检出文件时,可以立即进行本地设置。因此,我的Web配置文件如下:

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

关于在不同环境中部署的问题,您有第一种选择是使用转换。如果您不知道这是什么,请阅读此处
由于我们使用Octopus Deploy作为我们的部署工具,我们的转换文件将包含"web.release.config"的连接字符串,如下所示。
<add name="appConnString"
   connectionString="{{appConnString}}"
   xdt:Transform="Update" 
   xdt:Locator="Match(name)" />

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

我相信 Visual Studio 的过程基本相同。

如果您不喜欢 Transforms 过程,也可以使用 parameters.xml 文件。msdeploy 使用此文件在构建时替换 web.config 中的值。您可以在 这里 阅读更多相关信息。

另一个考虑因素是,如果您在 Azure 上托管,则可以在各种部署插槽上设置特定的配置替换,一直到生产环境。

这些只是我使用和看到其他人非常有效使用的一些技术。有些需要一点时间来适应和设置,但拥有正确的部署系统将在长期运营中得到回报。


-12

或许有点自作聪明,但我认为添加 shell 全局通配符到一个文件中并没有必要制定一个“政策”。在读到这个问题之前,我从来没听说过 “connectionStrings”,但据我所知,它们保存了各种后端的 URI / 凭据。

后端改变的频率有多高?更好的是,配置文件路径的改变频率有多高?“可能不够频繁,不值得制定政策”。你唯一需要做的就是约定命名包含这些 connectionStrings 的配置文件,以便用自动化工具轻松识别它们。

因此,使用你的工具或编写脚本,并将 <connectionStrings configSource="foobarService.config" /> 的 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月 - 连接字符串策略的首席设计师

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


2
最好规定凭据文件始终被称为 FileThatContainsSomeSecret.credentials 或类似名称,并将 *.credentials 添加到您的 .gitignore 文件中。问题解决了。我声称自己是终极凭据管理元策略的创造者 - vonbrand
6
我很高兴你通过阅读问题学到了一些东西。我没有问如何管理 .gitignore 文件,而是如何管理 connectionsstrings,特别是在使用 VisualStudio 的情况下。如果你不明白问题,请不要用讽刺/反讽的回答来耍流氓。 - Matija Grcic
@Ярослав Рахматуллин 后端更改频率有多高?在某些情况下非常频繁。我有一个命名实例的数据库*.\mssql2014,而我的同事将其设置为默认值.*(点)。团队中有30个优秀的人。有时候优秀的人会犯错误并提交他们的配置。周五晚上,有人花了30分钟试图弄清楚为什么某个功能会抛出SQLException。 - evictednoise
将配置文件添加到.gitignore中。仍然不需要策略。 - Ярослав Рахматуллин
@Ярослав Рахматуллин 好的,已添加。明天我们的团队扩大到100人。他们拉取代码,但.config文件不在那里。除了连接字符串之外,还有一堆其他东西。U盘能拯救吗? - evictednoise
@ЯрославРахматуллин 另一个问题是开发人员实际上可能希望更改appSettings、SMTP、Oauth、WCF设置和其他一堆东西。这就是为什么它是“.config”文件的原因。另一方面,我为每个分支创建一个新的本地DB,因此我为每个项目有多个连接字符串。你必须承认你没有完全理解整个情况。 - Talon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接