我如何将一个公共代码库 fork 到我的账户下,并把我的 fork 保持为私有状态?我已经购买了支持私有代码库的订阅。
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
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
太棒了,你的私有仓库现在已经包含来自公共仓库的最新代码以及你所做的更改。
最后,要创建私有仓库 -> 公共仓库的拉取请求:
使用 GitHub 的用户界面创建公共仓库的 fork(在公共仓库页面右上方有一个小的“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月):
只需访问https://github.com/new/import。
在“Your old repository's clone URL”部分粘贴您想要导入的仓库URL,在“Privacy”中选择Private
。
当前的答案有点过时,所以为了清晰明了:
简短的回答是:
GitHub 上已有相应文档:duplicating-a-repository
你需要复制这个仓库
你可以看一下这个文档(来自于github)
为了创建一个没有 fork 的仓库的副本,你需要运行一个特殊的克隆命令以对原始仓库进行镜像推送到新仓库。
在以下情况下,你正在尝试推送的仓库 - 如 exampleuser/new-repository 或 exampleuser/mirrored - 在 GitHub 上应该已经存在。有关更多信息,请参见 "创建新存储库"。
镜像一个仓库
要创建一个完全相同的副本,你需要执行 bare-clone 和 mirror-push 两个操作。
打开命令行,并输入以下命令:
$ 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
我是git的新手,所以想尽可能地在eclipse GUI中完成(v2020-12; EGit v5.11)。详情如下。
---> 其他答案中的导入方法仅适用于Subversion、Mercurial或TFS项目。 GitHub不支持git项目的此方法,我第一手了解到。它可能有效,但为什么要冒险呢?
仓库和GitHub连接
eclipse/org.aspectj
是原始的公共仓库和upstream
用于获取
cb4/org.aspectj
是分叉(fork)并且origin
用于推送
cb4/remPrivAJ
是远程私人仓库并且private
用于推送
I:\local
是本地仓库
对于github认证,我使用了一个ed25519密钥的ssh (此SO答案中的步骤),因此我的连接URI看起来像这样:ssh://git@github.com/<user>/<repo>
。
注释:->
是鼠标单击或选择;right->
是右键单击。
步骤
-> 克隆Git存储库并将其添加到此视图 -> 克隆URI -> 下一步
-> 下一步
-> 下一步
-> 完成
以填充本地repoupstream
的新远程仓库,以便拉取更新
右键-> Remotes -> Create Remote ->
并输入名称upstream
-> 配置提取 -> 创建 -> 更改 ->
输入原始repo URI -> 完成
-> 保存并提取 ->
所有分支都被下载 -> 关闭
-> 高级
在要提取的规范
下,删除那里唯一的条目添加创建/更新规范 -> 源参考:下拉菜单
下选择master [branch] -> +添加规范 -> 强制更新
-> 保存规范至upstream配置 -> 完成 -> 保存并提取 ->
仅下载了主分支 -> 关闭
如下所示:
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
的新推送远程仓库。右键 -> 远程 -> 创建远程 ->
输入名称private
-> 配置推送 -> 创建 -> 更改 ->
输入远程私有仓库URI -> 完成
-> 高级选项 -> 添加所有分支规范 -> 强制更新 -> 保存在原始配置中 -> 完成
-> 保存并推送
主分支被推送。-> 关闭
此时,您已经将公共仓库fork到了您的私有仓库。要查看如何将私有更改推送到您的fork,然后打开针对原始公共仓库的拉取请求,请参见我的答案。生成的配置如下所示:
git clone
会设置远程跟踪分支和可能一些其他配置在克隆的仓库中,这些你并不需要。而 --bare 克隆只是从远程直接复制 .git 目录。 - bennlichgit push --mirror git@github.com:yourname/private-repo.git
的东西。 - ariels