【问题标题】:What's the best way to track private files in a public Mercurial repository?在公共 Mercurial 存储库中跟踪私人文件的最佳方式是什么?
【发布时间】:2011-08-17 15:26:23
【问题描述】:

“如果它不在源代码管理中,则它不存在。”

此问题已在此处针对 Git 解决:Techniques to handle a private and public repository?。 Mercurial 呢?

我有几个公共 Bitbucket 存储库(有多个提交者),我希望将源公开,但它们会从未跟踪的文件中加载 API、SSH 密钥和其他敏感信息。但是,如果我们添加新的 Mailchimp 或 Hunch 或 Twilio API 密钥,这会导致有人围绕新的配置文件发送电子邮件。有没有办法以某种方式保护这些文件不被公众看到并仍然跟踪它们?每个人都在通过 Bitbucket 同步他们的 repo。

【问题讨论】:

    标签: mercurial private config public


    【解决方案1】:

    有两种很好的方法来处理这个问题(除了 zerkms 的解决方案,它不能提供您想要的简单同步,但无论如何我都会这样做):

    1. 使用Mercurial Queues。当您使用 hg qinit --create-repo 创建一个 mercurial 队列时,它会创建一个覆盖系统,该系统可以在现有 repo 之上使用 qpushed。所以你把你的秘密放在队列中,当你需要它们时qpush它们,当你不需要它们时qpop它们。使用--create-repo,一组覆盖(补丁)在其自己的存储库中处理。因此,知情人士可以推送/拉取秘密覆盖回购,而无法访问它的人可以使用基本回购。补丁仓库可以是 bitbucket 上的私有仓库或托管在其他地方。

    2. 完全按照 git 解决方案中的描述使用 subrepo

    【讨论】:

      【解决方案2】:

      创建带有模板的filename.ext.sample文件(可能填充了虚拟数据),需要复制并填充特定工作目录中的实际数据。

      这是我通常做的;-)

      【讨论】:

        【解决方案3】:

        Zerkms 的解决方案快速、简单且干净,可能是防止安全内容被跟踪/发布的最佳选择;但是正如您所说,“如果它不在源代码管理中,它就不存在。”我发现我试图避免源代码控制的更多时候不是安全问题,而只是配置设置。我相信这些应该被跟踪,我现在的雇主有一个相当聪明的设置来处理这个问题,我将在这里尝试简化/概括/总结。

        REPOSITORY
          code/
            ...
          scripts/
            configparse.sh
            ...
          config/
            common.conf
            env/
              development.conf
              testing.conf
              production.conf
            users/
              dimo414.conf
              mycoworker.conf
              ...
            hosts/
              dimo414-laptop.conf
              dimo414-server.conf
              mycoworker-laptop.conf
              ...
            local.conf*
          makefile
          .conf*
        
        * untracked file
        

        希望这里的想法非常清晰,我们在每个适当的级别定义设置,从而以合乎逻辑且一致的方式对代码库的行为进行高度精细的控制。

        scripts/configparse.sh 脚本依次读取所有必要的配置文件,并从它找到的所有设置中构建.conf

        • config/common.conf 是起点,包含每个设置的逻辑默认值。许多可能会被覆盖,但这里指定了 something。在未在 common.conf 中首先设置的另一个文件中找到设置是错误的。
        • config/env/ 控制不同环境中的行为,例如指向正确的数据库服务器。
        • config/users/ 查找 $USER.conf 文件,该文件可用于设置我关心的内容,例如提高我的团队工作方面的日志记录级别,或自定义我喜欢在所有机器上使用的行为。
        • config/hosts 对机器做同样的事情,寻找 $HOSTNAME.conf。对于应用程序路径或数据目录等特定于机器的设置很有用。
        • config/local.conf 是一个未跟踪的文件,可让您设置特定于结帐的值和/或版本控制中不需要的内容。

        所有这些设置的汇总输出到.conf,这是代码库的其余部分在加载设置时所查找的内容。

        【讨论】:

          猜你喜欢
          • 2011-02-25
          • 1970-01-01
          • 2011-05-21
          • 2010-09-14
          • 1970-01-01
          • 2016-10-06
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多