我有一个项目,我使用 git 进行源代码控制,最终使用 github 进行控制。 在项目中,我有一个 app.config 文件,其中包含连接字符串名称和连接字符串。
在我的
.gitignore
中,我有 app.config
,这似乎阻止了 app.config
被签入。但是,我注意到这会导致新机器上的运行时错误,如果我从 github 拉取并尝试跑步。 这是由于应用程序依赖于 app.config
中的连接字符串。 为了缓解这个问题,我将连接字符串更改为“假”,只是为了获得密钥,需要提供值。
我签入了这个“存根”app.config,但现在我的真实 app.config 值正在被跟踪,并且希望在我所做的每次提交时都签入。
我有办法阻止这种情况发生吗? 我基本上想将我的存根 app.config 保留在源代码管理中,同时将我的“真实”app.config 保留在本地,而不跟踪对其进行的其他更改。 现在的问题是,在每次提交时我必须记住“排除”app.config,以免我的连接字符串(我不想公开)被签入源代码。
注意,据我所知,我的机器上目前没有安装git shell(我很惊讶它没有与VS一起安装)并且无权安装软件。 除了安装 git shell 和运行
git rm --cached <file>
之外,我还有其他选择吗?
尝试一下。我有一个类似的问题,并且正在使用我们团队内部的工具来修改配置设置并使它们脱离源代码控制,但现在我正在研究完全公共的存储库,我将不得不进行此更改,并且这是我将使用的方法(从明天开始,当我打算对此进行测试时:)
http://johnatten.com/2014/04/06/asp-net-mvc-keep-private-settings-out-of-source-control/
基本上,总结一下(按照OP的要求,但我仍然认为这篇文章最好详细地讲述了这一切):
使用文件属性将选择的应用程序设置移动到外部文件
您可能会遇到这样的情况,[...]其中[appSettings]配置部分中的大多数值对于项目来说都是全局的,但也包括一些应保持私有且不受源代码控制的设置。
在这些情况下,有一个专门用于 [appSettings] 部分的特殊文件属性,它本质上允许我们将 [appSettings] 扩展到外部文件。换句话说,ConfigurationManager 在引用 [appSettings] 时将识别两个位置中的内容,并使所有内容在应用程序中透明可用。
在我们的示例中,我们有一个电子邮件密码,我们希望保密。我们可以添加另一个名为 PrivateSettings.config 的 Web 配置文件。再次强调,不应该有 XML 标头。该文件应该包含的唯一内容是一组元素,以及在这些元素中我们希望私下定义的特殊设置。
特殊的 PrivateSettings.config 文件扩展了 AppSettings 部分:
<appSettings> <add key="MAIL_PASSWORD" value="xspbqmurkjadteck"/> </appSettings>
现在,我们从 Web.config 中删除电子邮件密码元素,并将 file 属性添加到section元素,指向新的 PrivateSettings.config 文件:
将文件属性添加到 Web.config AppSettings:
<appSettings file="PrivateSettings.config"> <add key="owin:AppStartup" value="AspNetIdentity2ExtendingApplicationUser.Startup,AspNetIdentity2ExtendingApplicationUser" /> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
再次,像以前一样,我们可以以标准方式访问任何设置 - 将电子邮件密码设置外部化到单独的文件对于客户端代码来说是透明的:
访问设置:
var pwd = ConfigurationManager.AppSettings["MAIL_PASSWORD"];
然后,最后一步:添加特殊文件[即。私人设置]到.gitignore
这是一个非常老的问题,但如果有人仍在使用 App.config,这就是我所做的:
使用 .gitignore 添加“App.config”,这样该文件就不会被跟踪。
创建 App.config 的副本,并将其重命名为 App.config.template。 从此文件中删除所有敏感信息并放入占位符。现在将此文件包含在您的源代码管理中。
然后,当有人新鲜获得该项目时,他们复制 App.config.template,并将其重命名为 App.config 并输入自己的详细信息。
虽然不完美,但确实有效。