清理外部承包商的mercurial存储库

时间:2011-07-01 07:00:11

标签: mercurial bitbucket

我有一个包含敏感文件和目录的活动项目。我想聘请外部承包商来做一些简单的UI工作。但是,我不希望承包商访问某些目录和文件。我的项目在Bitbucket上很不错。

清理项目并让他访问提交更改的最佳方法是什么?我想过分配到一个新的存储库,但我担心删除我不希望他访问的目录。

如何删除它们以使它们不显示原始更改集?如何合并他的repo而不删除我的主存储库中的那些目录?叉子是可行的吗?

2 个答案:

答案 0 :(得分:3)

当然,存储库需要访问其整个历史记录才能自我检查其完整性。我不知道有选择地隐藏部分存储库的方法(有ACL extension,但它仅用于写访问)。

在你的情况下,我会

  1. 创建一个新的存储库,其中所有敏感信息都已被删除(使用convert extension执行该任务)。
  2. 然后我会让外部人员使用该存储库。
  3. 一旦他的工作被完成,将他的存储库拉入原始存储库的克隆中(使用-f强制拉出不相关的存储库),并且
  4. rebase他的第一个变更集及其所有子项都在原始存储库的头部。
  5. 最后,将重新定位的头部推送到原始存储库。
  6. 对于步骤3到5,您不一定要等到外部开发人员完成。也可以重新建立其存储库的中间状态。

    然而,这是一个理论上的想法......人们必须看到它在实践中的表现。

    替代方案:如果您经常有外部承包商不应该看到您的代码的某些部分,我会在@ Anton的评论中设置与多个存储库相关的权限。

答案 1 :(得分:2)

有多种方法可以做到这一点:

  1. 使用子存储库
  2. 使用多个存储库
  3. ???
  4. 无论如何,您需要重新构建和拆分现有存储库,因此如果您有很多人在这个项目上工作,这将造成严重破坏,他们都需要停止工作,同步他们的工作,破坏他们的本地克隆并克隆重组后的新鲜副本。

    使用多个存储库的一种方法是执行以下操作:

    1. 为存储库制作2个额外的克隆(如果一切都失败,请保留一个用于后备的克隆,您可以随时返回)
    2. 您需要运行hg convert命令以摆脱承包商不应访问的所有零碎的第一个克隆
    3. 然后修复该存储库,使其自行运行。您可能必须更改代码以为任何不存在但您打算在构建之前注入项目的任何内容提供挂钩和事件
    4. 然后你需要在另一个克隆上运行hg convert以摆脱现在第一个出现的所有内容。
    5. 然后你从第一个(承包商)存储库拉到第二个(私有)存储库,合并,并进行必要的修复,以便代码仍按预期工作
    6. 您现在拥有的是两个存储库:

      1. Contractor-repository,只包含您要公开的位
      2. 私有存储库,已从承包商存储库中提取并合并,并包含所有其他零碎的部分
      3. 从现在开始,每当承包商将工作推送到他的存储库时,您需要从中拉出并进入私有存储库然后合并。

        您的存储库看起来像这样:

        Contractor:  ---97---98---99---100---102---103---104
        
                                                       M                 M
        Private:     ---91---92---93---94---95---96---101---105---106---107
                                                     /                 /
                                                    /                 /
                               ---97---98---99---100---102---103---104
        

        上面M的两个变更集是合并变更集,它将承包商提供的代码合并到您的私有存储库中。

        请注意,您也必须将代码提交给承包商 - 存储库,以便在那里处理和修复代码中的错误,但是您可以将所有私有位保密。