2

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

  1. 创建两个仓库repo_int、repo_ext。Repo_ext 只有一个名为“shared”的分支。
  2. 让外部开发者推送到那个分支
  3. 使用本地克隆拉取并推送到第二个内部开发者分支

这可以按如下方式完成:

创建裸仓库

$ 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”,这是一个代码审查工具,具有深远的用户权限管理。是否可以使用此工具处理问题?

非常感谢!

4

1 回答 1

3

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

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

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

于 2012-12-27T15:58:31.880 回答