如何在两者之间建立一个带有pull请求的公共/私有git存储库

时间:2017-11-16 16:23:38

标签: git github

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

鉴于有时我们开发的代码必须在主要仓库上市之前保持私有一段时间,我希望有以下情况:

  • 主要回购公众
  • 福克斯私人
  • 能够从货叉到主仓库提出拉动请求
  • 保持简单,因为有些用户是git初学者

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

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

1 个答案:

答案 0 :(得分:1)

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


我按照以下步骤操作:Answer to this question by: Martin Konicek

  1. 首先,复制其他人说的回购(详情here):
  2. 通过Github UI创建一个新的回购(我们称之为private-repo)。然后:

    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
    
    1. 克隆私人仓库,以便您可以使用它:

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

    2. 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
      

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

      1. 最后,创建一个拉取请求私人仓库 - >公开回购:
      2. 创建拉取请求的唯一方法是对公共仓库进行推送访问。这是因为您需要推送到那里的分支(here's why)。

        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
        

        现在只需通过Github UI为public-repo创建一个拉取请求,如here所述。

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

        当然可以重复整个过程(只需省略添加遥控器的步骤)。第一次之后你只需要从所需的遥控器(公共或私人)拉出并推送到(私人)。完成更改后,将更改推送到(私有:使其保持最新),并将更改推送到Public上,以便创建对主服务器的拉取请求。