删除GitHub存储库的fork依赖项

时间:2013-04-17 05:47:32

标签: github

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

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

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

6 个答案:

答案 0 :(得分:148)

您可以contact github support并要求他们将您的存储库切换为“正常模式”。

this page上,“提交是在一个分叉”段落中,解释说必须经过支持才能切换。因此,很可能你自己没有办法做到这一点(除非你破坏并重新创建你之前解释过的repo ...如果你这样做,请注意你的项目是否附有票或wiki? strong> 删除!)。

答案 1 :(得分:40)

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

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

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

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

答案 2 :(得分:22)

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

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

答案 3 :(得分:18)

我遇到了类似的问题,并最终使用此github help page来解决它。我并不介意维基和问题跟踪器,因为我的博客使用的是另一个用户亲切开发的主题。

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

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

答案 4 :(得分:9)

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

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

  1. 转到需要分离的存储库:https://<ghe url>/<org>/<repo>
  2. 点击右上角的“网站管理员”火箭
  3. 点击&#34;协作&#34;在顶部菜单栏上
  4. 点击左侧窗格中的“网络”
  5. 单击“网络结构”窗格中的“生成根”
  6. 接受
  7. 这是在GitHub Enterprise 2.9上测试的

答案 5 :(得分:6)

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

这里是documentation for git clone --bare

  

制作一个裸Git存储库。也就是说,不是创建<directory>并将管理文件放在<directory>/.git中,而是将<directory>本身设为$GIT_DIR。这显然意味着-n,因为无处可查看工作树。此外,远程处的分支头直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/。使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。

这里是documentation for git push --mirror

  

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

注意:与其他基于git的答案一样,这不会复制不属于git回购的问题,例如维基和问题。 Per Tapio:

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