2

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

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

如何删除它们以使它们不会出现原始变更集?如何在不删除主存储库中的那些目录的情况下合并他的存储库?叉子是要走的路吗?

4

2 回答 2

3

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

在你的情况下,我会

  1. 创建一个新的存储库,其中所有敏感信息都已被剥离(使用该任务的转换扩展)。
  2. 然后我会让外部人员使用该存储库。
  3. 一旦他的工作完成,将他的存储库拉到原始存储库的克隆中(-f用于强制拉取不相关的存储库),并且
  4. 他的第一个变更集及其所有子项重新设置为原始存储库的头部。
  5. 最后,将重新定位的头推送到原始存储库。

对于步骤 3 到 5,您不必等到外部开发人员完成。重新调整他的存储库的中间状态也是可能的。

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

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

于 2011-07-01T11:28:52.280 回答
2

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

  1. 使用子存储库
  2. 使用多个存储库
  3. ???

无论如何,您都需要重组和拆分现有存储库,因此如果您有很多人在此项目上工作,这将造成严重破坏,他们都需要停止工作,同步他们的工作,销毁他们的本地克隆并在之后克隆新副本重组。

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

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

您现在拥有的是两个存储库:

  1. 承包商存储库,仅包含您要公开的位
  2. 一个私有存储库,已从承包商存储库中提取和合并,并包含所有其他点点滴滴

从现在开始,每当承包商将工作推送到他的存储库时,您需要从中拉出并进入私有存储库,然后合并。

您的存储库将如下所示:

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 的两个变更集是将承包商提供的代码合并到您的私有存储库中的合并变更集。

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

于 2011-07-01T12:21:54.917 回答