GitHub从私人到公共回购的请求可能吗?

时间:2012-01-12 12:01:34

标签: git github

我分叉了一个公共回购并将新回购私有化。

我在我的私人仓库中添加了一个新的远程分支,并提交了一些修复程序。

现在,我想从我的私人仓库中的分支机构向我分叉的公共仓库创建一个拉取请求。

我在私人仓库中选择分行,然后点击“拉取请求”。

我点击“更改提交”。

我无法更改组织/回购所有者。我只看到我的组织,但不是公共回购。我只能针对私人仓库的主分支创建一个拉取请求,但这不是我想要的。

是否无法在私人仓库中修复某个公共仓库并在之后创建拉动​​请求?

3 个答案:

答案 0 :(得分:6)

一种解决方案是将原始的公共仓库分配到您在GitHub上的公共仓库中 然后将公共仓库(您拥有的)分成私有仓库。

然后在本地工作站上克隆两者,并且:

  • 对您的私人本地仓库进行公开和私人修改
  • 将任何公开修改推送到您当地的公共回购(您可以推送到您的GitHub公共回购站)
  • 在GitHub上发布您的分叉公共回购请求。

答案 1 :(得分:4)

我怀疑这是Github的意图,但你实际上可以通过一些简单的DOM操作从私有到公共仓库发出拉取请求:

  1. 对您的私人仓库进行更改,可能是在新分支上。
  2. 发起拉取请求。点击更改提交按钮。
  3. 打开一个允许您修改DOM的编辑器。像Firebug或Safari网络检查员或Chrome开发人员工具这样的东西似乎工作正常。
  4. 编辑基本分支存储库。您需要更改所选选项标记的值。
  5. 接下来,单击分支名称(如果需要,可以更改)。您需要执行此操作以触发ajax更新。
  6. 更新提交范围,你应该好好去。
  7. 一些警告:

    • 对于未列为协作者的公众或用户,单击提交链接或查看文件将为404。一旦它合并,一切似乎都很好,但对于公共回购的维护者来说可能有点奇怪。
    • 只需从UI接受拉取请求。我不认为它会让任何人手动合并或樱桃选择提交。私人回购所有者可能需要解决冲突。

答案 2 :(得分:3)

2021 年更新

@VonC 的回答在概念上是正确的,并且仍然是 GitHub 支持的。九年后,@Sebi 终于得到了他想要的答案——我消除了他在 VonC 答案的第二个要点中评论的“间接”。

对于我的用例,我需要对公共存储库进行 publicprivate 更改。公共提交一旦准备好就可以定期推送。私人更改必须保留在我的私人仓库中,直到我完成我的博士研究。那时,我需要所有私有更改通过拉取请求从我的公共分支流到原始公共存储库。

大部分工作是正确设置事物。我提供了 detailed steps in this SO answer。以下步骤仅在 Eclipse GUI(v2020-12;EGit 5.11)中完成,但可以轻松转换为命令行操作。我使用的存储库是这些:

  • eclipse/org.aspectj原始公共存储库;用于获取的 upstream 遥控器
  • cb4/org.aspectj 是我的;用于推送的 origin 遥控器
  • cb4/remPrivAJ 是我的远程私有仓库private 用于推拉的遥控器
  • I:\local 是我工作站上的本地存储库

对于 github 身份验证,我使用带有 ed25519 ssh 密钥 (how-to in this SO question) 的 ssh,因此我的连接 URI 如下所示:ssh://git@github.com/<user>/<repo>

符号:-> 是鼠标点击或选择; right-> double-> 分别是右键单击和双击。


我通过将每个更改放在单独的分支中来将公共更改与私有更改分开:pub 用于 公共 更改; priv 用于私有更改。我对 git 还很陌生,所以可能有更好的方法来做到这一点。

  1. 创建和配置分支
  • 1.1 在eclipse Git Perspective中,在本地repo下:打开Branches然后打开Local(每个旁边都有-> v
  • 1.2 对于私有分支:right-> master -> Create Branch -> Select -> private/master -> Ok 输入 priv for Branch name: -> Configure upstream for push and pull -> When pulling: Merge -> Finish
  • 1.3 对于公共分支:right-> master -> Create Branch 输入 pub for Branch name: -> Finish
  • 1.4 结果:在我的私有仓库 private/master、我的公共分支 orign/master 和原始公共仓库 upstream/master 中提交的编号都匹配 config

  1. 进行私有更改并提交
  • 2.1 进行一些更改,然后在 Git Perspective 的 Git Staging 选项卡上查看有关它们的详细信息
  • 2.2 选择单个更改并将其添加到索引中,方法是单击绿色加号
  • 2.3 或通过单击绿色双加号将它们全部选中
  • 2.4.输入提交消息并-> Commit and Push -> Preview -> Push -> Close
  • 2.5 注意新的提交号
    commit

  1. 私有更改推送到公共分支
  • right-> priv -> Push Branch -> Remote: dropdown v -> origin: URI(我的是原点:ssh://git@github.com/cb4/org.aspectj)double-> master 在 Branch: 文本框中输入 priv 然后 {{ 1}}

  1. 在 GitHub 上,我的公共分支中的私有更改。请注意与上面相同的提交编号(单击图像放大)。 changes pushed

  1. 要完成该过程并针对原始公共存储库打开一个私有更改拉取请求,只需点击 double-> priv [branch] -> Preview -> Push -> Close 和瞧! (单击图像放大)。 pull request

附加特性和功能

  • 当然,您可以将 public 提交推送到公共分支:Compare & pull request
  • 尽可能频繁地从原始公共存储库中提取和合并更新以减少合并冲突:在远程right-> pub -> Push Branch -> Preview -> Push -> Close
  • 然后将它们推送到您的叉子:在遥控器下right-> upstream -> Fetch
  • 到您的私人存储库:在 Remotes right-> origin -> Push