如何在两者之间拥有一个带有拉取请求的公共/私有 git 存储库

Sim*_*rin 4 git github

我在 github 上有一个公共存储库,我组的每个用户都有一个它的分支。政策是禁止直接提交到主存储库,并且所有更改都必须作为来自分叉的拉取请求进来,以便在合并到主存储库之前可以对其进行审查。

鉴于有时我们开发的代码必须在主存储库公开之前保持私有一段时间,我想有以下情况:

  • 主回购公开
  • 叉子私有
  • 能够从分叉向主仓库发出拉取请求
  • 考虑到一些用户是 git 初学者,让事情变得简单

现在,在 Github 上这是不可能的,因为不允许私有分叉。

我可以使用什么策略来实现类似的行为?

小智 6

我只是做了类似的事情。对我有用的解决方案是创建一个新的私有仓库作为主仓库的裸克隆,并将所有新更改推送到此私有仓库,一旦更改准备好公开,将更改推送到公开回购。



我按照以下步骤操作:回答这个问题:Martin Konicek


  1. 首先,像其他人所说的那样复制 repo(详情请点击此处):

private-repo通过Github UI创建一个新的存储库(我们称之为)。然后:

git clone --bare https://github.com/exampleuser/public-repo.git
cd public-repo.git
git push --mirror https://github.com/yourname/private-repo.git
cd ..
rm -rf public-repo.git
Run Code Online (Sandbox Code Playgroud)
  1. 克隆私有存储库,以便您可以对其进行处理:

    git clone https://github.com/yourname/private-repo.git cd private-repo 做一些改变 git commit git push origin master


3.从公共仓库中提取新的变更:

cd private-repo
git remote add public https://github.com/exampleuser/public-repo.git
git pull public master # Creates a merge commit
git push origin master
Run Code Online (Sandbox Code Playgroud)

太棒了,您的私人仓库现在拥有来自公共仓库的最新代码以及您的更改。


  1. 最后,创建一个拉取请求私有仓库 -> 公共仓库:

创建拉取请求的唯一方法是拥有对公共存储库的推送访问权限。这是因为您需要推送到那里的分支(原因如下)。

git clone https://github.com/exampleuser/public-repo.git
cd public-repo
git remote add private_repo https://github.com/yourname/private-repo.git
git checkout -b pull_request_branch
git pull private_repo master
git push origin pull_request_branch
Run Code Online (Sandbox Code Playgroud)

现在只需创建公共回购通过Github上UI拉请求,如描述在这里

一旦项目审查了拉取请求,就可以合并它。

当然,整个过程可以重复(只需省略添加遥控器的步骤)。第一次之后,您只需从所需的远程(公共或私有)中拉出并推送到(私有)。完成更改后,将更改推送到(私有:保持最新)和公共上的某个分支,以便可以创建对 master 的拉取请求。