如何保持两个存储库同步,其中一个存储库是另一个存储库的子节点?

时间:2014-03-14 00:08:47

标签: git gitlab

我的团队正在开发一个框架,我们将公开发布。但是,我们只希望公开部分源代码;属于我们希望保密的核心部分。我们将通过仅共享核心的DLL来实现。因此,存储库管理将成为一个问题。我们如何只向部分代码授予读取权限?

可能的解决方案

我们考虑了三种可能的解决方案。他们是:

  1. 保留单个存储库并管理文件夹的读取权限;
  2. 符号链接;
  3. 将存储库分成两部分并使用git hooks。
  4. 1。保留单个存储库并管理文件夹的读取权限

    Git无法做到。更接近的解决方案是使用gitolite,但它仅具有写入操作的文件夹级别权限。此外,我们已经在使用GitLab。

    2。符号链接

    据我所知,这不起作用。我认为它可能只在一个方向起作用,即更新公共存储库,但我不确定。

    3。将存储库分成两部分并使用git hooks

    我认为这是要走的路。我们必须创建两个存储库,完整存储库公共存储库。完整存储库仅供使用核心和开发应用程序模块的团队使用。然后,他们将可以访问整个源代码。

    公共存储库源自完整存储库。它将由完整存储库的一部分组成,例如核心DLL和应用程序模块。公共存储库将仅为开发新应用程序模块的用户设计。

    由于用户和核心团队都将开发新的应用程序模块,因此我们需要在两个存储库中配置post-receive挂钩。公共存储库的脚本需要检查有关完整存储库的增量修改。然后,它将生成并应用具有这些增量的补丁。对完整存储库也是如此。

    但是,要检查这些增量,服务器需要保留两个存储库的本地副本。首先,脚本将更新这些存储库,然后检查新的增量。这些增量将被提交,最后,脚本会将修改推送到源存储库。

    我们是否朝着正确的方向前进?

    我担心这个解决方案太复杂了。有更好的解决方案吗?如何保持两个存储库同步,其中一个存储库是另一个存储库的子节点,这个子节点也可以有更新?

1 个答案:

答案 0 :(得分:2)

你可以用submodule来解决这个问题。您可以单独创建私有存储库和公共子存储库,然后将公共存储库添加为私有存储库的子模块。

只要子模块完全公开,这应该可以正常工作。像这样的东西。首先,您可以在任何地方创建公共存储库,例如Github。然后是私人存储库:

cd private
git init
git submodule add git://github.com/company/public public
git commit -m "Added public submodule"

其他所有内容都应按预期工作,两个存储库都是独立的存储库,但公共本身就是私有存储库的一部分。