我的团队正在开发一个框架,我们将公开发布。但是,我们只希望公开部分源代码;属于我们希望保密的核心部分。我们将通过仅共享核心的DLL来实现。因此,存储库管理将成为一个问题。我们如何只向部分代码授予读取权限?
我们考虑了三种可能的解决方案。他们是:
Git无法做到。更接近的解决方案是使用gitolite,但它仅具有写入操作的文件夹级别权限。此外,我们已经在使用GitLab。
据我所知,这不起作用。我认为它可能只在一个方向起作用,即更新公共存储库,但我不确定。
我认为这是要走的路。我们必须创建两个存储库,完整存储库和公共存储库。完整存储库仅供使用核心和开发应用程序模块的团队使用。然后,他们将可以访问整个源代码。
公共存储库源自完整存储库。它将由完整存储库的一部分组成,例如核心DLL和应用程序模块。公共存储库将仅为开发新应用程序模块的用户设计。
由于用户和核心团队都将开发新的应用程序模块,因此我们需要在两个存储库中配置post-receive
挂钩。公共存储库的脚本需要检查有关完整存储库的增量修改。然后,它将生成并应用具有这些增量的补丁。对完整存储库也是如此。
但是,要检查这些增量,服务器需要保留两个存储库的本地副本。首先,脚本将更新这些存储库,然后检查新的增量。这些增量将被提交,最后,脚本会将修改推送到源存储库。
我们是否朝着正确的方向前进?
我担心这个解决方案太复杂了。有更好的解决方案吗?如何保持两个存储库同步,其中一个存储库是另一个存储库的子节点,这个子节点也可以有更新?
答案 0 :(得分:2)
你可以用submodule来解决这个问题。您可以单独创建私有存储库和公共子存储库,然后将公共存储库添加为私有存储库的子模块。
只要子模块完全公开,这应该可以正常工作。像这样的东西。首先,您可以在任何地方创建公共存储库,例如Github。然后是私人存储库:
cd private
git init
git submodule add git://github.com/company/public public
git commit -m "Added public submodule"
其他所有内容都应按预期工作,两个存储库都是独立的存储库,但公共本身就是私有存储库的一部分。