Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为外部承包商清理mercurial存储库_Mercurial_Bitbucket - Fatal编程技术网

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

为外部承包商清理mercurial存储库,mercurial,bitbucket,Mercurial,Bitbucket,我有一个活动项目,其中包含一些敏感文件和目录。我想聘请一个外部承包商来做一些简单的UI工作。但是,我不希望承包商能够访问某些目录和文件。我的项目在Bitbucket上处于mercurial状态 清理项目并允许他提交更改的最佳方式是什么?我曾想过分岔到一个新的存储库,但我担心删除我不想让他访问的目录 如何删除它们,使它们不会显示为原始变更集?如何在不删除主存储库中的目录的情况下合并他的回购协议?分叉是否是一条路?自然,存储库需要访问其整个历史,以便自我检查其完整性。我不知道有什么方法可以选择性地隐

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

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


如何删除它们,使它们不会显示为原始变更集?如何在不删除主存储库中的目录的情况下合并他的回购协议?分叉是否是一条路?

自然,存储库需要访问其整个历史,以便自我检查其完整性。我不知道有什么方法可以选择性地隐藏存储库的某些部分,但它仅用于写访问

对你来说,我会的

创建一个新的存储库,在该存储库中,所有敏感信息都已被剥离,请为该任务使用。 然后我会让外部人员使用该存储库。 一旦他的工作完成,使用-f强制拉取不相关的存储库,将其存储库拉入原始存储库的克隆,然后 他的第一个变更集和它的所有子项都放在原始存储库的头部。 最后,将重定基头推送到原始存储库。 对于步骤3到步骤5,您不必等待外部开发人员完成。也可以重新设置存储库的中间状态

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


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

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

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

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

多做两个存储库克隆,留一个备用。如果一切都失败了,你可以随时返回 您需要在第一个克隆上运行hgconvert命令,以清除承包商不应访问的所有位和块 然后修复该存储库,使其自行工作。您可能必须更改代码,以便为不存在但在构建之前要注入到项目中的任何内容提供挂钩和事件 然后,您需要在另一个克隆上运行hgconvert,以消除第一个克隆中现在存在的所有内容。 然后从第一个承包商存储库拉入第二个私有存储库,合并,并进行必要的修复,以便代码仍能按预期工作 您现在拥有两个存储库:

承包商存储库,仅包含要公开的位 一个私有存储库,从承包商存储库中提取和合并,并包含所有其他部分 从现在起,每当承包商将工作推送到他的存储库时,您都需要从中提取到私有存储库中,然后合并

您的存储库如下所示:

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


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

您是指写访问权限还是读访问权限?构建软件需要敏感文件吗?您可能必须使用convert扩展重新构造项目,以便所有非敏感位或至少他需要的位都位于完全独立、可构建的回购协议中,然后将其作为整个项目的子回购协议。这将是一个相当具有破坏性的操作,并将使任何其他人制作的克隆(假设其他人已经制作)无效。