【问题标题】:How to hide connection string, user name, pw when using source control?使用源代码管理时如何隐藏连接字符串、用户名、密码?
【发布时间】:2011-03-11 18:04:50
【问题描述】:

我正在处理一个小型副项目,我正在使用连接字符串以及其他人不应该看到或使用的 api 键和值。我使用公共 GitHub 帐户进行源代码控制。当这些值在 web.config 中以纯文本形式出现时,使用源代码管理的常用方法是什么?

在签入代码之前是否需要手动删除这些值?

【问题讨论】:

  • 我通常只是在签入前将其删除,但这容易出错且不方便。我也想听听这方面的一些想法。

标签: version-control github connection-string


【解决方案1】:

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

<connectionStrings configSource="cstrings.config"/>

通过这种方式,您可以签入 Web.config 和具有可在开发机器上使用的通用值的 cstrings.config 文件。 (例如,(本地),...MyAppNameDb...)

对于生产环境,将 cstrings.config 文件标记为只读并设置您的部署脚本,这样您就不会尝试覆盖它。您的生产连接字符串受到该盒子上任何安全措施的保护。这使您的敏感字符串不受版本控制。

cstrings.config

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

【讨论】:

    【解决方案2】:

    您可以签入像 config.sample 这样包含虚拟值的文件。然后,每个开发人员都会将该文件复制到配置中并在他们自己的值中进行编辑。然后,您可以将此本地文件放在 .gitignore 中。

    【讨论】:

    • gitignore 不能处理已经被跟踪的文件。
    • 这是务实的解决方案
    • @nathanchere,实际上 gitignore 对已经被跟踪的文件起作用。只是,为了使 gitignore 正常工作,必须“停止跟踪”这些文件 git rm -cached filename。此命令将从 git 存储库中删除文件,但会将其物理保存在本地存储库中。而且,如果它将被添加到 .gitignore - 那么它将不会被跟踪。
    • 每个人都必须在本地手动执行此操作。这不是我们可以在存储库本身上设置的自动操作。
    【解决方案3】:

    我发现有效的方法是用空白或虚拟值签入文件版本,然后运行:

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

    然后,Git 将停止监视对该文件的更改,从而使您可以将真正的配置信息放入其中,而不必担心签入。

    如果您稍后进行了您想要签入的更改,您可以运行:

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

    【讨论】:

    • 准确!这就是我一直在寻找的。没有变通办法,只是有效!
    • 非常有用!我将此方法与其他解决方案 (configSource) 相结合,仅隐藏连接字符串,但允许轻松更改配置。
    • 如果您使用 git stash 和 git stash pop ,此方法会重置文件内容 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多