我必须处理以下场景:假设我们有一个项目,我们为此目的使用git。外部用户应该可以处理不受内部更改直接影响的部分代码(插件,...)。因此,由于git无法删除读取权限,您如何看待此过程:
这可以按如下方式完成:
创建裸存储库
$ 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”,这是一个代码审查工具,具有深远的用户权限管理。是否可以使用此工具处理问题?
非常感谢!
答案 0 :(得分:3)
Git是一个分散版本控制系统。这意味着您可以轻松地在不同存储库之间推送和提取提交。
只需创建一个公共存储库和一个私有存储库,并让公共存储库只提取私有存储库的特定分支。当在任一存储库上推送对其中一个公共分支的提交时,您应该使用post-receive挂钩将其推送到另一个存储库。
实际上,这只不过是在本地存储库上创建本地分支。您是唯一可以与当地分支机构合作的人,除非您允许某人将您从当地分支机构撤离。