我有一个项目,我使用git控制源代码,最后是github。在项目中,我有一个app.config文件,其中包含连接字符串名称和连接字符串。
在我的.gitignore
内app.config
我似乎已阻止app.config
被检入。但是,我注意到这会导致新机器出现运行时错误,我应该从github拉出并尝试运行。这是因为应用程序依赖于app.config
中的连接字符串。为了缓解这种情况,我将连接字符串更改为" fake"只要拥有密钥,就需要提供价值。
我签了这个" stub" app.config,但现在我正在跟踪我的真实app.config值,并希望在每次提交时检入。
我有办法阻止这种情况发生吗?我基本上想要保留我在源代码管理中的存根app.config,同时保持我的"真实" app.config local,无需跟踪其他更改。现在的问题是,在每次提交时我都必须记住"排除" app.config,以免我的连接字符串(我不想公开)被检入源。
注意 ,据我所知,我目前没有在机器上安装git shell(我很惊讶它没有安装VS)并且做了无权访问安装软件。除了安装git shell并运行git rm --cached <file>
之外,我还有其他选择吗?
答案 0 :(得分:2)
给它一个旋转。我有一个类似的问题,并使用我们团队内部的工具来修改配置设置并使它们不受源代码控制,但现在我正在处理完全公开的回购,我将不得不进行此更改,并且我将采用的方法(从明天开始,当我打算测试它时):
http://johnatten.com/2014/04/06/asp-net-mvc-keep-private-settings-out-of-source-control/
基本上,总结一下(根据Op的要求,但我仍然认为这篇文章最详细地说明了最好的):
使用文件属性将选择应用程序设置移动到外部文件
您可能有一个案例,其中[appSettings]配置部分中的大部分值都是项目的全局值,但也包含一些应该保持私有且保持不在源的设置控制。
在这些情况下,[appSettings]部分专门提供了一个特殊的文件属性,它基本上允许我们将[appSettings]扩展到外部文件。换句话说,当引用[appSettings]时,ConfigurationManager将识别两个位置中的内容,并使所有内容在应用程序中透明可用。
在我们的示例中,我们有一个我们希望保密的电子邮件密码。我们可能会添加另一个名为PrivateSettings.config的Web配置文件。再一次,应该没有XML头。该文件应该包含的唯一内容是一组元素,在这些元素中,我们希望私下定义特殊设置。
特殊PrivateSettings.config文件扩展AppSettings部分:
<appSettings> <add key="MAIL_PASSWORD" value="xspbqmurkjadteck"/> </appSettings>
现在,我们从Web.config中删除电子邮件密码元素,并将文件属性添加到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