如何分叉公共存储库,但将我的分叉设为私有?我确实订阅了支持私有存储库。
7 回答
答案是正确的,但没有提到如何在公共 repo 和 fork 之间同步代码。
这是完整的工作流程(我们在开源React Native之前已经这样做了):
首先,像其他人所说的那样复制 repo(详情请点击此处):
private-repo
通过Github UI创建一个新的 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
make some changes
git commit
git push origin master
从公共回购中获得新的热点:
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
太棒了,您的私人仓库现在拥有来自公共仓库的最新代码以及您的更改。
最后,创建一个 pull request 私有 repo -> public repo:
使用 GitHub UI 创建公共 repo 的 fork(公共 repo 页面右上角的小“Fork”按钮)。然后:
git clone https://github.com/yourname/the-fork.git
cd the-fork
git remote add private_repo_yourname https://github.com/yourname/private-repo.git
git checkout -b pull_request_yourname
git pull private_repo_yourname master
git push origin pull_request_yourname
现在,您可以通过 Github UI 为 public-repo 创建一个拉取请求,如此处所述。
一旦项目所有者审查了您的拉取请求,他们就可以合并它。
当然,整个过程可以重复(只需省略添加遥控器的步骤)。
现在还有一个选择(2015 年 1 月)
- 创建一个新的私人仓库
- 在空的回购屏幕上有一个“导入”选项/按钮
- 单击它并放置现有的 github repo url 没有提及 github 选项,但它也适用于 github repos。
- 完毕
你必须复制回购
你可以看到这个文档(来自 github)
要在不分叉的情况下创建存储库的副本,您需要对原始存储库运行特殊的克隆命令并将镜像推送到新存储库。
在以下情况下,您尝试推送到的存储库——例如 exampleuser/new-repository 或 exampleuser/mirrored——应该已经存在于 GitHub 上。有关详细信息,请参阅“创建新存储库”。
镜像存储库
要进行精确复制,您需要同时执行裸克隆和镜像推送。
打开命令行,输入以下命令:
$ git clone --bare https://github.com/exampleuser/old-repository.git # Make a bare clone of the repository $ cd old-repository.git $ git push --mirror https://github.com/exampleuser/new-repository.git # Mirror-push to the new repository $ cd .. $ rm -rf old-repository.git # Remove our temporary local repository
如果您想在另一个位置镜像存储库,包括从原始位置获取更新,您可以克隆一个镜像并定期推送更改。
$ git clone --mirror https://github.com/exampleuser/repository-to-mirror.git # Make a bare mirrored clone of the repository $ cd repository-to-mirror.git $ git remote set-url --push origin https://github.com/exampleuser/mirrored # Set the push location to your mirror
与裸克隆一样,镜像克隆包括所有远程分支和标签,但每次获取时都会覆盖所有本地引用,因此它始终与原始存储库相同。设置推送的 URL 可以简化推送到您的镜像。要更新您的镜像,获取更新并推送,这可以通过运行 cron 作业来自动化。
$ git fetch -p origin $ git push --mirror
2021 更新
我是 git 新手,所以想在 eclipse GUI(v2020-12;EGit v5.11)中做尽可能多的事情。详情如下。
--->其他答案中的导入方法仅适用于 Subversion、Mercurial 或 TFS 项目。正如我亲身了解到的,GitHub 不支持 git 项目。它可能有效,但为什么要冒险呢?
存储库和 GitHub 连接
eclipse/org.aspectj
是原始公共仓库,upstream
远程获取
cb4/org.aspectj
是分叉,origin
远程推送
cb4/remPrivAJ
是远程私有仓库,private
远程推送
I:\local
是本地仓库
对于 github 身份验证,我使用 ssh 和 ed25519 密钥(此 SO 答案中的步骤),因此我的连接 URI 如下所示ssh://git@github.com/<user>/<repo>
:
符号: ->
是鼠标点击或选择;right->
是右键单击。
脚步
- 在 github 上,将原始公共仓库fork到您的 github 帐户
- 在 github 上,创建空的远程私有仓库
- 在 eclipse Git Perspective 中,将 fork 克隆到新的本地 repo 并进行配置
- 3.1
-> Clone a Git Repository and add clone to this view -> Clone URI -> Next
- 3.1.1 根据需要输入 URI、连接和身份验证信息
-> Next
- 3.1.2。选择所需的分支(我只选择了master)
-> Next
- 3.1.3. 输入本地仓库的目标目录
- 3.1.4。现在导入项目或稍后再做,然后
-> Finish
填充本地仓库
- 3.1.1 根据需要输入 URI、连接和身份验证信息
- 3.2. 将原始公共 repo 配置为一个新的远程,命名
upstream
为下拉更新- 3.2.1。
right-> Remotes -> Create Remote ->
并输入姓名upstream
- 3.2.2.
-> Configure fetch -> Create -> Change ->
输入原始回购 URI-> Finish
- 3.2.3。
-> Save and Fetch ->
所有分支都已下载-> Close
- 3.2.4。注意:我只想要主分支,所以这样做而不是步骤 3.2.3
- 3.2.5。
-> Advanced
下Specifications to fetch
,删除那里的唯一条目 - 3.2.6。在下
Add create/update specification -> Source ref: dropdown
并选择master [branch] -> +Add Spec -> Force Update
- 3.2.7。
-> Save specifications in upstream configuration -> Finish -> Save and Fetch ->
仅下载 master 分支-> Close
- 3.2.1。
- 将远程公共存储库复制到您的远程私有存储库并进行配置。这是eclipse中唯一无法完成的步骤,所以我安装了Git for Windows并使用了GitCMD。
像这样:
git clone --bare git://github.com/eclipse/org.aspectj.git tmpRepo
<if prompted, enter ssh passphrase>
cd tmpRepo
git push --mirror ssh://git@github.com:cb4/private.git
<if prompted, enter ssh passphrase>
cd ..
rmdir tmpRepo /s /q
- 将远程私有仓库配置为一个新的远程命名
private
为推送
- 5.1。
right-> Remotes -> Create Remote ->
并输入姓名private
- 5.2.
-> Configure push -> Create -> Change ->
输入远程私有仓库 URI-> Finish
- 5.3.
-> Advanced -> Add All Branches Spec -> Force Update -> Save specifications in origin configuration -> Finish
- 5.4.
-> Save and Push
master 分支被推送-> Close
此时,您已将公共存储库分叉到您的私有存储库中。要查看如何将私有更改推送到您的 fork,然后针对原始公共存储库打开拉取请求,请参阅我的答案。生成的配置如下所示: