删除GitHub仓库的fork依赖

我怎样才能让GitHub忘记或分离我的回购最初是另一个项目的分支?

我在GitHub上创建了一个项目。我现在可以看到“fork from whatever/whatever”。不再维护父存储库“whatever/whatever”。我已经被允许继续使用原始存储库的代码库来创建一个独立的存储库。

是否有方法将我的项目从原始存储库分离?

87330 次浏览

确保你的本地repo上有所有重要的分支和标签,删除github repo,通过通常的方式重新创建存储库(没有分叉),并使用git push --all将本地存储库推回。注意,如果您有不想发布的本地分支,可能值得为该操作创建一个临时干净的本地克隆。

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

这就产生了问题。它们可以通过API导出,但据我所知,你只能创建问题和评论与你的人,所以完美地导入它们是不可能的。

所以,如果你需要保留问题,你应该像Thomas Moulard建议的那样通过github支持。

2022年1月更新:

使用GitHub聊天机器人虚拟助手https://support.github.com/contact?tags=rr-forks&subject=Detach%20Fork&flow=detach_fork

< >强第一个回答: 你可以联系github支持并要求他们将你的存储库切换到“正常模式”

这个页面上,“Commit was made in a fork”;段落,说明了一个人必须通过支持切换。因此,很可能自己无法做到这一点(除非你销毁并重新创建之前解释过的回购…如果你这样做要小心,如果你有票或维基附加到你的项目,因为他们<强> < /强>被删除!)。

我得到了类似的问题,并最终使用Github帮助页面来解决它。我不介意wiki和问题跟踪器,因为我的博客使用了另一个用户好心开发的主题。

在几次提交后分离一个fork的回购并将其作为自己的使用,而不会丢失整个历史记录:

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

在github网站上创建一个新的空存储空间new-repository。 并推送一个镜像版本:

cd user.github.com.git/

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

人们可以在github上重命名forked_repository,用另一个名字来保存它作为备份,并在需要时检查更新。或者干脆删除它。

new-repository重命名为原来的名称就可以完成这项工作。作为副作用,您的提交现在显示在历史记录中。

使用来自aurelien克莱顿的信息,我能够用以下方法做到这一点:

$ 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

下面是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回购,可以在每个Tapio中以类似的方式处理。地址是:git@github.com:user/repo.wiki.git
  • 问题可以通过GitHub API导出,但由于它们只能由您的用户创建,因此重新创建它们会有问题,因此导入将丢失信息。

这只适用于GitHub企业,而不是github.com

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

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

这在GitHub Enterprise 2.9上进行了测试

你可以从GitHub UI中复制fork存储库到一个新的存储库(没有fork依赖),然后删除原来的fork存储库:

  • 登录GitHub
  • 选择右上角的+符号并选择导入库
  • 导入您的分叉存储库。新的存储库将没有fork依赖。
  • 在存储库设置中删除原始的分叉存储库。

注意:这种方法不会保留问题和拉取请求。

用你的凭证登录GitHub。

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

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

您将收到一封带有票号的电子邮件,在那里您可以检查您的请求的状态。一旦你的回购被defork,你也会收到电子邮件通知。

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

如果你不需要任何过去的提交(在我的情况下不需要),你可以:

  • 项目分叉
  • 创建fork的本地副本(我使用我的IDE来做)
  • 从本地副本中删除git文件夹
  • 就像你通常会提交一个新项目一样提交这个项目。

之后你可以从你的github账户中删除fork。只花了我一分钟,效果很好。