我该如何使GitHub忘记或取消关联我的仓库最初是另一个项目的分支?
我在GitHub上fork了一个项目。现在我可以看到"forked from whatever/whatever"。原始仓库"whatever/whatever"不再维护。我已经被允许继续使用原始仓库的代码库创建独立的仓库。
是否有一种方法可以将我的项目与原始仓库分离?
我该如何使GitHub忘记或取消关联我的仓库最初是另一个项目的分支?
我在GitHub上fork了一个项目。现在我可以看到"forked from whatever/whatever"。原始仓库"whatever/whatever"不再维护。我已经被允许继续使用原始仓库的代码库创建独立的仓库。
是否有一种方法可以将我的项目与原始仓库分离?
2022年1月更新:
请使用GitHub聊天机器人虚拟助手:https://support.github.com/contact?tags=rr-forks&subject=Detach%20Fork&flow=detach_fork
第一个回答: 你可以联系GitHub支持,请求将你的代码库切换到“正常模式”。
在这个页面的“提交是在Fork中完成的”段落中,解释了需要通过支持来进行切换。因此,很可能没有办法自己完成(除非你销毁并重新创建你的repo,但要小心,如果你的项目附带有票据或维基,它们将会被删除!)。
您可以从GitHub UI中将派生库复制到新的库(没有依赖项),然后删除原始的派生库:
注意:这种方法将不会保留问题和拉取请求。
git push --all
命令将本地存储库推送回去。请注意,如果您有不想发布的本地分支,可能值得为该操作创建一个临时干净的本地克隆。git@github.com:user/repo.wiki.git
)。我遇到了类似的问题,最后使用了这个github帮助页面解决了问题。由于我的博客是使用另一个用户友好开发的主题,因此我并不关心wiki和问题跟踪器。
如果想要从forked repo分离出来,并在不失去整个历史记录的情况下将其用作自己的repo:
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
重命名为原始名称即可完成操作。作为副作用,现在您的提交记录将出现在您的历史记录中。
使用您的凭据登录GitHub。
前往https://support.github.com/contact?tags=rr-forks&subject=Detach%20Fork&flow=detach_fork。
选择“分离”,然后输入分支的URL或repo名称作为your-user-name/repository-name
,并回答虚拟助手的其他问题。
您将收到一封带有工单号码的电子邮件,您可以通过该号码检查请求的状态。 您还将通过电子邮件收到通知,一旦您的repo被 deforked。
大多数仓库设置将保持不变,包括用户权限,stargazers,问题,PR,讨论等。
在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
的文档:
创建一个裸的 Git 仓库。即,不再创建
<directory>
目录并将管理文件放在其中的<directory>/.git
目录下,而是直接将<directory>
作为$GIT_DIR
。因此必须使用 -n 参数,因为无处可用来检出工作树。此外,远程仓库上的分支头会被直接复制到相应的本地分支头,而不是映射到refs/remotes/origin/
。使用该选项时,不会创建 remote-tracking 分支和相关的配置变量。
这里是关于 git push --mirror
的文档:
不指定要推送的每个 ref,而是将
refs/
下(包括但不限于refs/heads/
、refs/remotes/
和refs/tags/
)的所有 ref 都镜像到远程仓库。新创建的本地 ref 会被推送到远程端,本地更新的 ref 会被强制更新到远程端,已删除的 ref 会从远程端删除。如果配置项remote.<remote>.mirror
被设置,则这是默认操作。
注:与其他基于 git
的答案一样,这不会复制不属于 git
仓库的问题,例如 wiki 和 issues。根据 Tapio 的说法:
git@github.com:user/repo.wiki.git
。此操作仅适用于GitHub企业版,不适用于github.com。
以具有管理员特权的帐户登录:
https://<ghe url>/<org>/<repo>
此方法已在GitHub Enterprise 2.9上进行了测试。
如果您不需要任何过去的提交记录(在我的情况下是这样),您可以:
您可以在 github 帐户中删除该 fork。只需花费一分钟即可,非常简单。