我在github上有一个公共存储库,我的组的每个用户都有一个它的分支。该政策是禁止直接提交主回购,所有更改必须作为来自货叉的拉动请求,以便在合并到主回购之前对其进行审核。
鉴于有时我们开发的代码必须在主要仓库上市之前保持私有一段时间,我希望有以下情况:
现在,在Github上这是不可能的,因为不允许私人分叉。
我可以使用什么策略来实现类似的行为?
答案 0 :(得分:1)
我刚刚做了类似的事情。 对我有用的解决方案是创建一个新的私有Repo作为主要仓库的裸克隆,并将所有新更改推送到此私有仓库,一旦变更准备公开,将更改推送到公共回购。
通过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
克隆私人仓库,以便您可以使用它:
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
太棒了,您的私人仓库现在拥有来自公共仓库的最新代码以及您的更改。
创建拉取请求的唯一方法是对公共仓库进行推送访问。这是因为您需要推送到那里的分支(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上,以便创建对主服务器的拉取请求。