删除GitHub存储库的fork依赖关系


206

我怎样才能让GitHub忘记或取消关联我的仓库原来是另一个项目的分支?

我在GitHub上创建了一个项目。我现在可以看到“从任何东西/任何东西分叉”。父存储库“无论/什么”都不再维护。我被允许继续使用原始存储库的代码库来创建独立的存储库。

有没有办法将我的项目与原始存储库分离?

Answers:


175

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

此页面的 “使用叉子进行提交”段落中,说明必须经过支持才能切换。因此,很可能是没有办法做到这一点自己(除非你破坏并重新创建您的回购这之前...解释的。如果你这样做要小心,如果你有票或维基连接到你的项目,因为它们删除!)。


30
我可以确认与支持小组的联系非常正常,而且他们经常在几个小时内答复:-)
BenC 2014年

1
链接页面不再包含所述信息。
卡拉布赖特韦尔2014年

3
@MattBrennan页面已更改,但最后一部分仍然包括:“要分离分支并将其变成GitHub.com或GitHub Enterprise上的独立存储库,请分别与GitHub支持或您的站点管理员联系。”
Thomas Moulard 2014年

1
超级快..他们在1小时内回答了我。谢谢
myDoggyWritesCode

2
在Github Enterprise中,您现在可以在admin-> Collaboration-> Network下找到它,并且根据您的用例,应该使用“ Make Root”,“ Detach”或“ Extract”。
库奇(Kutzi)

45

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

  • 登录到github
  • 选择右上角的+号,然后选择导入存储库
  • 导入您的分叉存储库。新的存储库将没有fork依赖项。
  • 在存储库设置中删除原始的,分叉的存储库。

1
这是最简单的方法,对我有用:)。非常聪明。
moxi '18

1
其他人是否对导入功能“悬挂”有疑问?我的一直在“检测项目的版本控制系统…”上大约5个小时。我不确定我是否正在排队,或者是实际的死机。回购很小。试着把它过夜,以防万一我在排队。
本杰明·韦斯特

我终于好奇了,只是点击了“取消”。单击“取消”可以跳过VCS检测,仅导入代码/提交/分支等。导入Github-> Github就是这种情况。如果我来自其他VCS,导入可能不会挂起?不确定。另请注意,在执行第二次回购操作时,我不得不取消两次才能正常工作。如果CLI复制所有相同的数据可能是更好的方法,但是希望这对选择此路由的其他用户有所帮助。
本杰明·韦斯特

9
需要明确的是,这种方法不会保留问题和拉取请求。
golopot

像魅力一样工作!谢谢你是救命稻草!:)
全方位

44

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

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

这留下了问题。可以通过API导出它们,但据我所知,您只能与您的人员创建问题和评论,因此无法完美导入它们。

因此,如果您需要保留问题,则应按照Thomas Moulard的建议接受github支持。


根据有多少个问题,可能有可能将它们一个一个地转移到新的存储库中,然后再从网络中删除旧的存储库(help.github.com/en/github/managing-your-work-on- github /…)。我猜一个有决心的人每小时可以传送100多个问题-这不是一件有趣的事,但是对于许多存储库而言,这是一件可行的事情。
Suma

22

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

要分离一个分叉的仓库并在几次提交后用作您自己的仓库,而不会丢失整个历史记录:

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为原始名称即可完成工作。副作用是,您的提交现在会出现在您的历史记录中。


11

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

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

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

这已经在GitHub Enterprise 2.9上进行了测试


根据您的用例,“分离”或“提取”可能更合适。我发现'Make Root'有点奇怪,因为它基本上会反转当前root-> child方向。(Github Enterprise 2.17)
Kutzi

10

使用来自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

这是有关的文档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导出问题,但是由于只能由您的用户创建问题,因此存在重新创建问题的问题,因此导入将丢失信息。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.