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

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

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


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

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

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

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

2022年1月更新:

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

第一个回答: 你可以联系github支持人员,让他们把你的存储库切换到“正常模式”。

在本页,“提交是在一个分叉”段落,它解释说,一个人必须通过支持切换。因此,很可能自己无法做到这一点(除非你销毁并重新创建之前解释过的回购…如果你这样做了,如果你有票或wiki附加到你的项目,他们将被删除!)

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

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

Git克隆——bare git@github.com:user/forked_repo.git

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

cd user.github.com.git /

Git推送——镜像git@github.com:user/new-repository.git

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

将新存储库重命名为原始名称即可完成此工作。作为副作用,您的提交现在显示在历史记录中。

根据aurelien和Clayton提供的信息,我可以做到以下几点:

$ 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的文档:

Make a bare Git repository. That is, instead of creating <directory> and placing the administrative files in <directory>/.git, make the <directory> itself the $GIT_DIR. This obviously implies the -n because there is nowhere to check out the working tree. Also the branch heads at the remote are copied directly to corresponding local branch heads, without mapping them to refs/remotes/origin/. When this option is used, neither remote-tracking branches nor the related configuration variables are created.

下面是git push——mirror的文档:

指定refs/下的所有引用(包括但不限于refs/heads/、refs/remotes/和refs/tags/)将被镜像到远程存储库,而不是将每个ref命名为push。新创建的本地裁判将被推送到远端,本地更新的裁判将在远端强制更新,删除的裁判将从远端删除。如果配置选项为remote.<remote>,则此值为默认值。镜像设置完成。

注意:像其他基于git的答案一样,这将不会复制不属于git回购的问题,如wiki和问题。每Tapio:

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

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

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

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

这在GitHub Enterprise 2.9上进行了测试

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

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

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

用你的凭证登录GitHub。

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

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

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

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

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

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

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