如何在使用源代码控制时隐藏连接字符串、用户名和密码?

53

我正在开展一个小型的项目,需要使用连接字符串和API密钥等敏感信息,这些信息不应被其他人查看或使用。我使用公共GitHub帐户进行源代码控制。当这些值以明文形式存储在web.config文件中时,通常的源代码控制方法是什么?

我需要在提交代码之前手动删除这些值吗?


2
我通常在检入之前将其删除,但这很容易出错并且不方便。我也想听听大家的想法。 - John Weldon
3个回答

77

我发现有效的方法是提交一个具有空白或虚拟值的文件版本,然后运行:

git update-index --assume-unchanged [fileName]

接着,Git将停止监视该文件的更改,让您可以放入真正的配置信息,而不用担心将其提交。

如果您稍后进行更改并想要检查它们,可以运行:

git update-index --no-assume-unchanged [fileName]

1
非常准确!这就是我想要的。没有变通方法,只是有效! - kroe
1
非常有用!我将这种方法与另一种解决方案(configSource)结合起来,只隐藏连接字符串但允许轻松的配置更改。 - fabsenet
1
如果您使用git stash和git stash pop,这种方法会重置文件内容 :( - fabsenet

35

我们将敏感和/或机器特定的配置保存在单独的配置文件中,然后使用configSource将它们包含在以下方式中...

<connectionStrings configSource="cstrings.config"/>

您可以通过检查Web.config和cstrings.config文件来获取通用值,该值可在开发机器上使用。(例如(local),...MyAppNameDb...)。

对于生产环境,请将cstrings.config文件标记为只读,并设置部署脚本以便您不会尝试覆盖它。您的生产连接字符串由该框上的任何安全性保护。这样可以使您的敏感字符串不被版本控制所掌握。

cstrings.config:

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
    <add name="Default" connectionString="Server=localhost"/>
</connectionStrings>

5

您可以检查一个包含虚拟值的config.sample文件。每个开发人员都会将该文件复制到config中,并编辑自己的值。然后,您可以将此本地文件放入.gitignore中。


3
已经被 Git 跟踪的文件无法使用 gitignore 忽略。需注意不改变原意,简洁易懂。 - nathanchere
这是实用的解决方案。 - Pedro Rodrigues
@nathanchere,实际上gitignore适用于已经被跟踪的文件。只需为了使gitignore起作用,就必须“停止跟踪”这些文件git rm -cached filename。此命令将从git存储库中删除文件,但将其保留在本地存储库中。如果将其添加到.gitignore中,则不会跟踪它。 - kosist
每个人都必须在本地手动完成这个操作。我们无法在存储库本身上设置自动化功能。 - nathanchere

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