Git:阻止外部用户访问特定分支

时间:2012-12-27 15:54:48

标签: git version-control gerrit

我必须处理以下场景:假设我们有一个项目,我们为此目的使用git。外部用户应该可以处理不受内部更改直接影响的部分代码(插件,...)。因此,由于git无法删除读取权限,您如何看待此过程:

  1. 创建两个存储库repo_int,repo_ext。 Repo_ext只有一个名为“shared”的分支。
  2. 让外部开发人员推进该分支
  3. 使用本地克隆拉动并推送到第二个内部开发人员分支
  4. 这可以按如下方式完成:

    创建裸存储库

    $ mkdir ~/remotes/repo_int.git
    $ cd ~/remotes/repo_int.git && git init --bare
    $ mkdir ~/remotes/repo_ext.git
    $ cd ~/remotes/repo_ext.git && git init --bare
    

    创建新的区域设置存储库

    $ cd /path/to/my/project && git init 
    

    创建共享分支&看看

    $ git checkout -b shared 
    

    添加遥控器repo_ext和repo_int

    $ git remote add -t shared repo_ext ~/remotes/repo_ext.git 
    $ git remote add repo_int ~/remotes/repo_int.git 
    

    进行初步推送

    $ git remote push repo_ext shared && git remote push repo_int * 
    

    将HEAD从repo_ext设置为分支共享

    $ git symbolic-ref HEAD refs/heads/shared
    

    获取对repo_ext的外部访问权限:

    $ git clone ~/remotes/repo_ext.git 
    

    进行一些更改并推送内容

    $ git push origin shared 
    
    内部存储库中的

    执行分支检出并使用更改,例如合并或挑选

    $ git clone ~/remotes/remote_int
    $ git checkout -b shared repo_ext/shared 
    ...
    

    您会怎么说,这是一种值得推荐的安全方式来处理这个问题吗?我听说过“gerrit”,这是一个代码审查工具,具有深远的用户权限管理。是否可以使用此工具处理问题?

    非常感谢!

1 个答案:

答案 0 :(得分:3)

Git是一个分散版本控制系统。这意味着您可以轻松地在不同存储库之间推送和提取提交。

只需创建一个公共存储库和一个私有存储库,并让公共存储库只提取私有存储库的特定分支。当在任一存储库上推送对其中一个公共分支的提交时,您应该使用post-receive挂钩将其推送到另一个存储库。

实际上,这只不过是在本地存储库上创建本地分支。您是唯一可以与当地分支机构合作的人,除非您允许某人将您从当地分支机构撤离。