【问题标题】:Hide/Encrypt part of file in Git在 Git 中隐藏/加密部分文件
【发布时间】:2017-09-26 03:54:14
【问题描述】:

我使用 Git 对服务器的配置文件进行版本控制。一个文件(即来自Gogsapp.ini)要求数据库用户和密码以明文形式存储。

有没有什么方法可以透明地提交文件而不让 Git 存储库的其他用户看到密码?我可以在登台时使用git add --patch,但我希望它是透明的,这样其他用户(和我)就不必在每次提交时都注意这样做。

【问题讨论】:

  • 典型的方法是根本不将这些文件提交到您的存储库,而是提交一个模板。实际的配置文件通常应该只驻留在需要它们的服务器/机器上。您最终提出的下一个问题是如何忽略本地更改,因为开发人员通常会针对其他配置进行调试,并且适用相同的答案。
  • 您可以删除密码并将文件添加到预提交挂钩中。或者,如果跟踪密码,则仅引发错误以使提交失败。但是你还是要注意文件被重命名或者钩子没有安装在新的克隆仓库中。
  • @LasseV.Karlsen:我知道版本控制或 Git 可能不是管理服务器配置文件的合适方式,但我们团队这样做的方式是因为它带来了改变的可能性沟通和讨论。我真的希望实际配置驻留在 repo 中,敏感部分被隐藏。
  • 我认为它可能类似于this,但我希望将过滤器附加到存储库,而不是我个人 Git 配置的一部分。

标签: git git-commit git-add


【解决方案1】:

正如 Lasse V. Karlsen 所建议的,您可以提交一个模板(例如,用星号替换您的密码)。

然后使用git update-index --assume-unchanged app.ini 让 git 忽略对该文件的所有进一步更改。提交后,您可以简单地插入真实的登录数据, git status 不会显示任何更改。所以你永远不会意外推送密码。

【讨论】:

  • 我认为它不能解决问题,因为我预计文件将来会有变化。
  • 然后您将使用--no-assume-unchanged 再次将其写入索引,写入您的更改,提交它们并再次将其从索引中删除,然后再次插入您的真实登录数据。
  • 解决方法没问题,但分心的用户仍然可能犯错误。
  • 你是说偶然?这意味着分心的用户“意外”将不得不调用 git update-index --no-assume-unchanged... 而 update-index 不是 那个 经常使用的 git 命令。
  • 这里的问题是没有安全的 100% 的方式来让 git 做你想做的事情。您要么要求 git 跟踪文件,要么不要求。如果您要求它跟踪文件,git status 将报告任何本地更改,任何git add . 将添加该文件。我在对该问题的评论中描述的“典型”方式不仅仅是“这是大多数人的做法”,它基本上是“这是唯一的做法”,因为任何其他解决方案都需要每个开发人员都勤奋提交时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-30
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多