在公共Mercurial存储库中跟踪私有文件的最佳方法是什么?

时间:2011-05-03 11:23:15

标签: mercurial private config public

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

这个问题是针对Git的:Techniques to handle a private and public repository?。 Mercurial怎么样?

我有几个公共Bitbucket repos(有多个提交者),我希望源是公开的,但是从未跟踪文件加载API,SSH密钥和其他敏感信息。但是,如果我们添加新的Mailchimp或Hunch或Twilio API密钥,则会导致有人通过电子邮件发送新的配置文件。有没有办法以某种方式将这些文件从公共视图中屏蔽并仍然跟踪它们?每个人都通过Bitbucket同步他们的回购。

3 个答案:

答案 0 :(得分:3)

有两种很好的方法可以解决这个问题(除了zerkms的解决方案,它不能提供你想要的同步,但我还是会做的):

  1. 使用Mercurial Queues。当您使用hg qinit --create-repo创建一个mercurial队列时,它会创建一个可以在现有仓库上qpush的覆盖系统。因此,您可以将秘密保存在队列中,并在需要时将其qpush保留,并在不需要时qpop。使用--create-repo覆盖(补丁)集合在其自己的存储库中处理。因此,知情人士可以推/拉秘密叠加回购,而无需访问它的人可以使用基础回购。补丁回购可以是bitbucket上的私人仓库或托管在别处。

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

答案 1 :(得分:2)

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

这就是我通常做的事情; - )

答案 2 :(得分:0)

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是起点,包含每个设置的逻辑默认值。许多可能会被覆盖,但某些在此指定。在另一个未在common.conf中首次设置的文件中找到设置是错误的。
  • config/env/控制不同环境中的行为,例如指向正确的数据库服务器。
  • config/users/查找$USER.conf文件,对于设置我关注的内容非常有用,例如提高我的团队工作方面的日志记录级别,或者自定义我希望在所有机器中使用的行为
  • config/hosts对机器执行相同操作,查找$HOSTNAME.conf。适用于特定于机器的设置,如应用程序路径或数据目录。
  • config/local.conf是一个未跟踪的文件,可让您在版本控制中设置特定于结帐的值和/或您不想要的内容。

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