2012-06-21 71 views
1

我即将对我的Mercurial存储库进行一些重大更改。因为我打算使用Feature of Last Resort,所以我正在寻找一些建议并保证我不会做一些愚蠢的事情。创建Mercurial子库,同时保留历史

我的位置:

我有一个Mercurial库与所有这些文件的完整历史记录:

/source 
    /secret_subsystem 
    /unclassified_subsystem 
    /common_files  

来源是Mercurial库。 秘密子系统文件夹包含我们想要保留在内部的知识产权代码。 未分类的子系统文件夹包含我们想外包给第三方维护的代码。 公共文件夹包含两个子系统都依赖的代码。我们将保留所有权,但我们希望与第三方分享。

显然,我不能把我的整个存储库推给第三方公司。第三方会看到太多。

如果我想成为:

Havingreaduponsubrepositories,这是我觉得我需要:

有三个subrepositories:secret_subsystem,unclassified_subsystem,common_files。 由于this recommendation,确保在/源级别没有其他文件。

让外包商在其机器上的源代码级别创建一个全新的存储库,并创建两个相应的子存储库。

将unclassified_subsystem和common_files推送到out-sourcer,根据需要撤回unclassified_subsystem,根据需要推出新的common_files存储库。

维护历史:

我想保持提交历史,尽量多的实际,对所有的子系统。

为此,我将运行hg convert扩展命令三次,每个子库都要执行一次。我将过滤掉只属于每个子库中的文件。我可能还需要映射文件名以将文件从./common_files/foo.py移动到./foo.py(例如)。

我的问题:

1)划分了一个仓库到subrepository实施合理的安全的方式 - 即。第三方只能看到和编辑我们的一些文件?

2)是否使用hg convert合理的方式从现有存储库创建子存储库,同时仍保留历史记录?

3)将hg convert的过滤器去掉(a)所有提交关于非过滤仓库中的文件的消息?它会过滤掉所有不在过滤仓库中的文件的所有差异吗?

还有一个隐含的问题:我是否陷入了一个受伤的世界?如果是这样,我会放弃保留文件历史记录,甚至让他们独立存储库,忘记交叉存储库提交。

回答

1

我没有用subrepos,到目前为止,但我可以回答2),3):

2)是的,听起来很有道理。

3)是的。

也有类似的问题只有2天前:Convert mercurial repository to subrepositories with full history (like hg log -f)

+1

一个额外的一点要注意的答案3.如果您进行了更改'secret_subsystem'加上一个其他文件夹的一个承诺你会很明显,在所有相关的子回购中看到相同的提交信息。 –