在 GitHub 上有一个公共仓库的私有分支?

Posted

技术标签:

【中文标题】在 GitHub 上有一个公共仓库的私有分支?【英文标题】:Having a private branch of a public repo on GitHub? 【发布时间】:2011-12-20 10:59:08 【问题描述】:

我在 GitHub 存储库中有一个公共 php 项目,其中仅包含一个分支(主分支)。

我想要一个单独的分支/分支,对我来说是私有的(我已为私有 GitHub 存储库付费)。我希望能够将私有分支/分叉中的更改合并到公共仓库,反之亦然。

考虑到这一点,以下是我的问题:

    我可以在公共仓库中拥有一个私有分支吗? 我可以将自己的公共 repo 分叉到我自己的私有分支/分叉中吗? 如果以上两种情况都可以,那么最好的方法是什么?如果两者都不是,我应该如何处理?

【问题讨论】:

将您的公共存储库分叉为私有存储库不是最好的主意,您可以在其中创建多个不推送(回)到公共存储库(反之亦然)的分支?跨度> 这就是我要问的,我希望能够创建公共回购的副本,但我的更新是私有的(除非我想将特定的东西推回公共) 24ways.org/2013/… @assylias,你能把它作为答案吗?这是我认为最好的答案,我自己找到文章之前没有注意您的评论。 @mbh86 这不是一个真正的答案,作为一个链接,我没有时间把它变成一个答案。但是,如果您想使用该页面的内容在此处创建答案(参考原始站点),它肯定可以帮助其他用户,您会得到我的支持 :-) 【参考方案1】:
    Duplicate your repo。 将复制的 repo 设为 GitHub 上的私有 repo。 将私有存储库克隆到您的计算机上 将远程添加到您的公共仓库(git remote add public git@github.com:...) 将用于公共存储库的提交的分支推送到新的公共远程。 (确保您不会意外提交专用代码) 您可以使用“git fetch public”将更改引入公共存储库,然后在本地合并它们并推送到您的私有存储库(原始远程)。

【讨论】:

复制对我来说很好,尽管我必须以相反的顺序进行,首先创建一个私有仓库,然后从命令行复制公共仓库。谢谢!【参考方案2】:

是否可以在公共 repo 上拥有一个私有分支?

在 GitHub 上,您的存储库是公共的或私有的;你不能选择性地“私有化”一个分支。

我可以将自己的公共 repo 分叉到我自己的私有分支/fork 中吗?

您可以将您的公共 repo 克隆到您的本地机器,根据需要进行分支,而不是将您的“私有”分支推送到上游(通过指定 which 分支推送到原点:git push origin master 或 @ 987654324@).

哪个是最好的前进方向/我应该如何进行?

为了利用 GitHub 进行公共和私人开发,我建议在 GitHub 内创建公共分支,将新分支的设置更改为“私人”,然后将私人版本克隆到本地机器。当您准备好公开更改时,将所有内容推送到您在 GitHub 上的私有分支,然后使用 pull requests 选择性地将分支复制到公共存储库。

要在 GitHub 上将存储库设为私有,您必须拥有升级的 (付费) 帐户。如果您只是在使用免费帐户,您仍然可以使用我建议的第一个过程 - 将公共克隆到本地机器,分支,并将特定的“公共”分支推送到源 - 而不需要私人回购.

如果您有一个付费的 GitHub 帐户,或者正在使用提供公共和私有分叉和拉取请求的其他服务(例如 BitBucket),那么您可以使用上述任何一种方法来公开您的代码。

【讨论】:

GitHub 不允许您将公共 repo 的分支设为私有。您必须复制存储库以使其私有,然后您将失去与公共存储库的连接。我想知道您是否可以将公共回购作为单独的远程添加到您的私人回购的本地克隆中。然后将分支推送到该远程。 不幸的是,这意味着无法使用拉取请求将更改从私有“fork”拉取到存储库的公共副本。 GitHub 现在为免费帐户提供无限的私有存储库。 鉴于推荐工作流程(来自私人分叉的 PR)不起作用,这确实不应该是最佳答案。 @mj1531 的回答是更好的工作流程。【参考方案3】:

我发现另一种解决方案更好,因为它不会导致在同一台机器上重复存储库。

用你想要私有的东西创建一个分支。 在 GitHub 上新建一个 repo,将其设置为私有。 将新的 GitHub 存储库作为第二个远程添加到您计算机上的存储库。 将私有分支推送到第二个远程。

最终结果是 1 个带有 2 个遥控器的存储库。 1 个公共,1 个私人。 只需要注意您推送的内容,以便相应地命名。

【讨论】:

【参考方案4】:

1.) 是否可以在公共 repo 上有一个私有分支

据我所知,没有。

2.) 我可以将我自己的公共回购分叉到我自己的私人分支中

不,您不能将完整的 repo(1-n 个分支)分叉到单个分支中。实际上你可以,如果你只分叉完整回购的一个分支。只需将其添加为远程或从克隆开始。

您可能还对Sparse checkouts 感兴趣。

3.) 如果以上两个都是可能的,那么这是最好的前进方式

不适用

4.) 如果两者都不可能,我应该如何进行?

不适用

【讨论】:

以上是关于在 GitHub 上有一个公共仓库的私有分支?的主要内容,如果未能解决你的问题,请参考以下文章

Docker安装私有仓库,用户认证(Registry)

Docker私有仓库搭建与界面化管理

解决Gi合并分支refusing to merge unrelated histories错误

GitLab fork 远程公共仓库

在浏览器中使用GitHub

Git:Git基础知识