Git - 如何使用子模块创建子集分支?

时间:2017-06-21 15:57:36

标签: git git-submodules

我试图找到为两个小组工作的项目配置Git存储库的方法。

两组中的每一组都应具有以下访问权限。

  • 第1组:' / src / dir_public'和' / src / dir_private'
  • 第2组:只能访问' / src / dir_public'

谷歌搜索后找到答案,我想" git-submodule"可能是最初的解决方案之一。

但经过快速测试后,我发现这不是我真正想要的。

我认为子模块不会被所谓的"超级项目"跟踪,但它们是。

换句话说,我想合并&s; src / dir_public'这可以由两个小组提交,但我不希望Group2知道" src / dir_private"。

是否可以按如下方式配置Git存储库?

  • 目录可见" master"分支(group1)

    • src / dir_public(repo_public)
    • src / dir_private(repo_private)
  • 在"私人"上可见的目录分支(group1)

    • src / dir_public(repo_public)
    • src / dir_private(repo_private)
  • 目录在" public"分支(与group2共享)

    • src / dir_public(repo_public)

我想通过以下方式管理/同步代码

  • 合并"公共"分支到#34; master"分支:" public"的任何更新分支应该合并到" master"分支
  • 合并"私人"分支到#34; master"分支:"私人"的任何更新分支应该合并到" master"分支
  • 合并"掌握"进入"公共"分支:这将有效,但我不希望dir_private在" public"分支。

最后,我添加了我测试的内容。

$ mkdir ~/superproject
$ cd ~/superproject
$ git init
$ mkdir src; mkdir dir_public;
$ cd src/dir_public
$ echo public code > public.c
$ git add .
$ git commit -am "Added the public file."
[master (root-commit) 9b11e8c] Added the public file.
 1 file changed, 1 insertion(+)
 create mode 100644 src/dir_public/public.c

$ mkdir ~/dir_private
$ cd ~/dir_private
$ git init
$ echo private code > private.c
$ git add .
$ git commit -am "Added the private file."
[master (root-commit) 9d34bb2] Added the private file.
 1 file changed, 1 insertion(+)
 create mode 100644 dir_private/private.c

$ cd ~/superproject/src
$ git submodule add ~/dir_private/
Cloning into '~/superproject/src/dir_private'...
done.
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   ../.gitmodules
    new file:   dir_private

1 个答案:

答案 0 :(得分:1)

查看此答案:A way to restrict Git branch access?

你想要做的是分叉回购,这样你就有自己的回购。你可以做任何你想要的分支。当您准备好与master(或每个人正在使用的任何分支)合并时,您可以推送。在开发期间没有人会看到你的分支。