GitHub:如何使公共存储库的分支私有?

我如何分叉一个公共存储库,但使我的分叉私有?我确实订阅了支持私有存储库。

195615 次浏览

你必须复制一份回购

你可以看到这个文档(来自github)

要在没有分叉的情况下创建存储库的副本,需要对原始存储库运行一个特殊的clone命令,并将镜像推到新存储库。

在以下情况下,你要推送的存储库——比如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

https://help.github.com/articles/duplicating-a-repository

目前的答案有点过时了,所以,为了清楚起见:

简单的回答是:

  1. 对public repo执行裸露的克隆
  2. 创建一个新的私有的。
  3. 对新的私有对象执行镜子推

这在GitHub上有文档:duplicating-a-repository

现在多了一个选择(2015年1月)

  1. 创建一个新的私有回购
  2. 在空的repo屏幕上有一个“import”选项/按钮 enter image description here
  3. 点击它,并把现有的github回购url 没有github选项提到,但它与github回购工作太。 enter image description here
  4. 完成

答案是正确的,但没有提到如何在公共回购和分叉之间同步代码。

下面是完整的工作流程(我们在开源反应本地之前已经做过了):


首先,复制其他人所说的回购(详细信息在这里):

通过Github UI. c创建一个新的repo(我们称它为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

太棒了,您的私人回购现在有来自公共回购的最新代码加上您的更改。


最后,创建一个pull request private repo -> public repo:

使用GitHub UI创建公共回购的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为公共回购创建一个拉请求,如在这里所述。

一旦项目所有者审查了您的pull请求,他们就可以合并它。

当然,整个过程可以重复(只需省略添加遥控器的步骤)。

GitHub现在有一个导入选项,可以让你选择任何你想要的新导入的公共或私有存储库

Github Repository import

只要去https://github.com/new/import

GitHub Import

在“您的旧存储库的克隆url”部分;粘贴你想要的回购URL,并在“隐私”;选择Private

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身份验证,我使用了带有ed25519密钥(步骤在这个SO回答)的ssh,因此我的连接uri看起来像这样:ssh://git@github.com/<user>/<repo>

-> 是鼠标点击或选择;right-> 是一个右键单击。


步骤

  1. 在github上,原始的公共回购到你的github帐户
  2. 在github上,创建空的远程私有回购
  3. 在eclipse Git透视图中,将fork克隆到一个新的本地回购并配置它
    <李> 3.1 __abc0
    • 3.1.1根据需要输入URI、连接和身份验证信息-> Next
    • 3.1.2. 选择所需的分支(我只选择了master) -> Next
    • 3.1.3. 输入本地回收的目标目录
    • 3.1.4. 现在导入项目或稍后再导入,然后-> Finish来填充本地repo
    <李> 3.2。将原来的公共回购配置为一个名为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. Specifications to fetch下的-> Advanced,删除那里唯一的条目
    • 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 ->只下载主分支-> Close

  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

  1. 将远程私有回购配置为一个名为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主分支被推入-> Close
在这一点上,您已经将一个公共回购分叉到您的私有存储库中。要了解如何将私有更改推到你的fork,然后对原始的公共回购点击这里查看我的答案打开一个拉请求。结果配置如下所示:
config < / p >