在 git 存储库中保密的最佳实践是什么?

问题描述 投票:0回答:5

问题

将此文件树视为我的开发存储库。

 - 富/
   - .git/
     - [...]
   - 酒吧/
     - 备份客户端.py
   - supersecretstoragecredentials.ini

对于开发,

supersecretstoragecredentials.ini
需要填写有效的凭据 - 而我仍然必须在存储库中保留它的干净版本,以便其他用户可以轻松设置他们的凭据。

可能的解决方案

  1. .gitignore
    supersecretstoragecredentials.ini
    并创建一个
    supersecretstoragecredentials.ini-example
    1. 指示用户将
      supersecretstoragecredentials.ini-example
      复制到
      supersecretstoragecredentials.ini
  2. backup.py
    中添加一个被 git 忽略的覆盖配置文件位置,例如
    supersecretstoragecredentials_local.ini

正如kan所指出的,这两种解决方案在工作流程方面相似,但并不完全相同。

还有其他选择吗?

git
是否拥有某种功能来帮助解决此类问题?

git version-control versioning
5个回答
13
投票

使用一些占位符值签入

supersecretstoragecredentials.ini
文件,然后

git update-index --assume-unchanged supersecretstoragecredentials.ini

Git 不会跟踪此文件的未来更改。

您可以使用

重置此设置
git update-index --no-assume-unchanged supersecretstoragecredentials.ini

5
投票

您在选项 1 中描述的内容基本上由内容

过滤器驱动程序
smudge步骤涵盖。

filter driver

如何使用嵌入式库?”问题中提供了两个选项。

涂抹脚本将获取您的

supersecretstoragecredentials.ini-example
(版本化),将其复制为
supersecretstoragecredentials.ini
版本化,被 Git 忽略),并从另一个源填充其值。

但除了如何实施策略的技术方面之外,主要措施是确保您的秘密值根本不存储在 Git 存储库中,而是来自另一个引用。


3
投票

我使用你的解决方案(你的两个解决方案是相同的,只是文件名不同)。你有什么问题吗?您期望什么样的功能?

此外,还有一个更有趣的解决方案

git update-index --assume-unchanged supersecretstoragecredentials.ini

希望这是您想要的。但是,如果上游更改了文件并且您正在拉取更改(不完全确定它是好还是坏),它就会失败。


1
投票

根据我的经验,在尝试了您的问题和迄今为止的答案中列出的所有选项之后,您的#2选项被证明是最简单和最干净的。它可靠地解决了问题,用最少的魔法,并且最容易理解。这是最好的无聊方式。


1
投票

我目前正在尝试的东西是 git-secrets。

https://github.com/awslabs/git-secrets

它挂钩 git 提交过程并检查看起来像不应签入的凭据的模式。

您必须确保它安装在每个开发人员的系统上并为每个 git 存储库进行配置。 如果您将检查集成到构建过程中,这可以很容易地实现。

© www.soinside.com 2019 - 2024. All rights reserved.