删除GitHub存储库的fork依赖项

Mic*_*ick 183 github

我如何让GitHub忘记或解除我的回购最初是另一个项目的分支?

我在GitHub中分叉了一个项目.我现在可以看到"从任何东西分叉".不再维护父存储库"any/whatever".我被允许继续使用原始存储库的代码库来创建一个独立的存储库.

有没有办法将我的项目从原始存储库中分离出来?

Tho*_*ard 160

您可以联系github支持并要求他们将您的存储库切换到"正常模式".

这个页面上,"提交是在一个分叉"段落,解释说必须通过支持切换.因此,很可能是没有办法做到这一点自己(除非你破坏并重新创建您的回购这之前...解释的.如果你这样做要小心,如果你有票或维基连接到你的项目,因为它们被删除!).

  • 我可以确认联系支持工作完美无瑕,而且他们经常在几个小时内回复:-) (28认同)
  • 我在 10 分钟前通过虚拟助手请求分离两个叉子,5 分钟后两个叉子都分离了:O (7认同)
  • 我希望 GitHub 不要将分叉视为二等公民,从而使这种“脱离”变得必要。分叉应该保留来自父分叉的继承,并且它们应该被视为“根”存储库。在分叉上​​工作并不可耻,而是以与他人合作和继承他人为荣,而且我们不应该为了使存储库得到一流的待遇而删除这种继承。 (5认同)
  • 在 Github Enterprise 中,您现在可以在管理 -> 协作 -> 网络下找到它,并且根据您的用例,您应该使用“Make Root”、“Detach”或“Extract”。 (4认同)
  • @MattBrennan页面已更改,但最后一部分仍包括:"要分离fork并将其转换为GitHub.com或GitHub Enterprise上的独立存储库,请分别联系GitHub支持或您的站点管理员." (3认同)

Tap*_*pio 42

确保在本地存储库中拥有所有重要的分支和标记,删除github存储库,通过常规方式重新创建存储库(无分支),然后推送本地存储库git push --all.请注意,如果您有不想发布的本地分支,则可能值得为该操作创建临时的干净本地克隆.

但是,这也将摆脱维基和问题.由于维基实际上是它自己的存储库,因此可以通过克隆它然后重新创建和推送来类似地处理它.回购地址在wiki的Git Access页面上(git@github.com:user/repo.wiki.git).

这留下了问题.它们可以通过API导出,但据我所知,您只能与您的人员一起创建问题和评论,因此完全导入它们是不可能的.

因此,如果您需要保留问题,您应该像Thomas Moulard建议的那样通过github支持.


Juu*_*nen 36

您可以从github UI将分叉的存储库复制到新的存储库(没有fork依赖性),然后删除原始的分叉存储库:

  • 登录github
  • 选择右上角的+号,然后选择Import repository.
  • 导入您的分叉存储库.新存储库不具有fork依赖性.
  • 删除存储库设置中的原始分叉存储库.

  • 需要明确的是,这种方法不会保留问题和拉取请求。 (12认同)
  • 还有其他人遇到过导入功能“挂起”的问题吗?我的“检测项目的版本控制系统……”已经持续了大约 5 个小时。我不确定我是在排队还是真的挂起。回购协议很小。我想把它留一夜以防万一我排队。 (2认同)

GOT*_*O 0 33

使用您的凭据登录 GitHub。

转到https://support.github.com/contact?tags=rr-forks&subject=Detach%20Fork&flow=detach_fork

选择“Detach”,然后输入分叉的 URL 或存储库名称your-user-name/repository-name,并回答虚拟助手的其他问题。

您将收到一封包含票号的电子邮件,您可以在其中查看请求的状态。一旦您的存储库被取消分叉,您还将收到一封电子邮件通知。

大多数存储库设置将保持不变,包括用户权限、观星者、问题、PR、讨论等。

  • 这个解决方案运行得很好,我可以使用 Firefox (94.0.2) 的虚拟助手。 (2认同)

aur*_*ien 19

我遇到了类似的问题,最后使用这个github帮助页面来解决它.我不介意维基和问题跟踪器,因为它是我的博客使用由另一个用户亲切开发的主题.

分离一个分叉的repo并在几次提交后使用它作为你自己的repo而不会丢失整个历史记录:

git clone --bare git@github.com:user/forked_repo.git

new-repository在github网站上创建一个新的空重定位.并推送镜像版本:

cd user.github.com.git/

git push --mirror git@github.com:user/new-repository.git

可以在github上重命名 forked_repository使用另一个名称将其保留为备份,并在需要时检查更新.或者只是删除它.

重命名new-repository为原始名称可以完成工作.作为副作用,您的提交现在会出现在您的历史记录中.


Gro*_*ify 9

使用来自aurelienClayton的信息,我可以通过以下方式做到这一点:

$ git clone --bare https://github.com/my/forked_repo.git
<delete forked_repo on GitHub>
<recreate repo on GitHub using same name>
$ cd forked_repo.git
$ git push --mirror
Run Code Online (Sandbox Code Playgroud)

这是有关的文档git clone --bare

制作一个裸露的Git存储库。也就是说,不要在其中创建<directory>和放置管理文件<directory>/.git,而<directory>应将自身设置为$GIT_DIR。显然,这意味着-n,因为没有地方可以检出工作树。同样,将远程站点的分支头直接复制到相应的本地分支头,而无需将其映射到refs/remotes/origin/。使用此选项时,不会创建远程跟踪分支或相关的配置变量。

这是有关的文档git push --mirror

代替命名每个裁判推的,则指定下的所有参考文献refs/(包括但不限于refs/heads/refs/remotes/refs/tags/)被镜像到远程存储库。新创建的本地裁判将被推送到远程端,本地更新的裁判将在远程端强制更新,而已删除的裁判将从远程端删除。如果remote.<remote>.mirror设置了配置选项,则这是默认设置。

注意:像其他git基于答案的答案一样,这不会复制不属于git仓库的问题,例如Wiki和问题。每个Tapio:

  • Wiki是一个单独的git repo,每个Tapio都可以类似的方式进行处理。地址是:git@github.com:user/repo.wiki.git
  • 可以通过GitHub API导出问题,但是由于只能由您的用户创建问题,因此存在重新创建问题的问题,因此导入将丢失信息。

  • 这正是我想要的。谢谢!! (2认同)

Ant*_* O. 9

这仅适用于GitHub Enterprise,而不适用于github.com

登录到具有管理员权限的帐户:

  1. 转到需要分离的存储库: https://<ghe url>/<org>/<repo>
  2. 单击右上角的"站点管理"火箭
  3. 点击顶部菜单栏上的"协作"
  4. 单击左窗格中的"网络"
  5. 单击"网络结构"窗格中的"生成根"
  6. 接受

这是在GitHub Enterprise 2.9上测试的

  • 根据您的用例,“分离”或“提取”可能更合适。我发现“Make Root”有点奇怪,因为它基本上会反转当前的 root-&gt;child 方向。(Github 企业版 2.17) (2认同)