【问题标题】:Delete fork dependency of a GitHub repository删除 GitHub 存储库的 fork 依赖项
【发布时间】:2022-03-10 19:21:30
【问题描述】:

如何让 GitHub 忘记或解除我的 repo 最初是另一个项目的 fork 的关联?

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

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

【问题讨论】:

    标签: github


    【解决方案1】:

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

    this page,“Commit was made in a fork”段落中,解释说必须通过支持才能切换。因此,您自己可能无法做到这一点(除非您销毁并重新创建之前解释过的回购协议......如果您这样做,如果您的项目附有门票或维基,请小心,因为它们em>删除!)。

    2022 年 1 月更新:

    https://support.github.com/request/fork 使用 GitHub 聊天机器人虚拟助手。

    【讨论】:

    • 我可以确认联系支持人员工作正常,而且他们通常会在几个小时内回复 :-)
    • 链接页面不再包含所述信息。
    • @MattBrennan 页面已更改,但最后一部分仍包括:“要分离分支并将其变成 GitHub.com 或 GitHub Enterprise 上的独立存储库,请分别联系 GitHub 支持或您的站点管理员。 "
    • 超级快.. 他们在 1 小时内回复了我。谢谢
    • 在 Github Enterprise 中,您现在可以在 admin->Collaboration->Network 下找到它,根据您的用例,您应该使用“Make Root”、“Detach”或“Extract”。
    【解决方案2】:

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

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

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

    【讨论】:

    • 这是最简单的,它对我有用:)。非常聪明。
    • 还有其他人遇到过导入功能“挂起”的问题吗?我的已经在“检测你项目的版本控制系统......”上大约 5 个小时了。我不确定我是在排队还是实际挂起。回购很小。想把它留一夜,以防我排队。
    • 我终于好奇,点了“取消”。单击取消允许它跳过 VCS 检测并仅导入代码/提交/分支等。导入 Github --> Github 时就是这种情况。如果我来自不同的 VCS,导入可能不会挂起?没有把握。另请注意,在使用第二个 repo 时,我必须取消两次才能正常工作。如果 CLI 复制所有相同的数据,这可能是一种更好的方法,但希望这有助于其他选择这条路线的人。
    • 明确一点,这种方法不会保留问题和拉取请求。
    • 像魅力一样工作!谢谢你是救生员! :)
    【解决方案3】:

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

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

    这会留下问题。可以通过API导出,但据我所知,你只能用你的人创建issues和cmets,所以完美导入是不可能的。

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

    【讨论】:

    • 根据问题的数量,可以将它们一一转移到新存储库,然后从网络上删除旧存储库 (help.github.com/en/github/managing-your-work-on-github/…)。我猜一个有决心的人每小时可以传输超过 100 个问题 - 这不是一件有趣的事情,但对于许多存储库来说是可行的。
    【解决方案4】:

    我遇到了类似的问题,最后用这个github help page 来解决它。我不介意 wiki 和问题跟踪器,因为我的博客使用了由其他用户开发的主题。

    要分离一个分叉的 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 重命名为原始名称即可。作为副作用,您的提交现在出现在您的历史记录中。

    【讨论】:

      【解决方案5】:

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

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

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

      这是在 GitHub Enterprise 2.9 上测试的

      【讨论】:

      • 根据您的用例,“分离”或“提取”可能更合适。我发现“Make Root”有点奇怪,因为它基本上会反转当前的 root->child 方向。 (Github 企业版 2.17)
      【解决方案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 存储库。也就是说,不是创建&lt;directory&gt; 并将管理文件放在&lt;directory&gt;/.git 中,而是将&lt;directory&gt; 本身设置为$GIT_DIR。这显然意味着 -n 因为没有地方可以检查工作树。远程的分支头也直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/。使用此选项时,既不会创建远程跟踪分支,也不会创建相关的配置变量。

      这是documentation for git push --mirror

      不是命名要推送的每个 ref,而是指定将 refs/ 下的所有 ref(包括但不限于 refs/heads/refs/remotes/refs/tags/)镜像到远程存储库。新创建的本地 refs 会被推送到远端,本地更新的 refs 会在远端强制更新,删除的 refs 会从远端移除。如果设置了配置选项remote.&lt;remote&gt;.mirror,这是默认设置。

      注意:与其他基于 git 的答案一样,这不会复制不属于 git 存储库的问题,例如 wiki 和问题。每塔皮奥:

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

      【讨论】:

      • 这正是我想要的。谢谢!!
      【解决方案7】:

      使用您的凭据登录 GitHub。

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

      输入fork的URL或repo名称your-user-name/repository-name,并回答虚拟助手的其他问题。

      您将收到一封包含票号的电子邮件,您可以在其中查看您的请求状态。一旦你的 repo 被分叉,你也会通过电子邮件收到通知。


      注意:我可以在 Chrome 和 Edge 中使用虚拟助手,但不能在 Firefox 中使用。此外,在分离回购后,我的票的状态仍处于待处理状态。我猜 GitHub 最终会在他们的过程中修复这些故障。

      【讨论】:

      • 这个解决方案效果很好,我可以使用 Firefox (94.0.2) 的虚拟助手。
      【解决方案8】:

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

      • fork 项目
      • 制作 fork 的本地副本(我使用我的 IDE 来做)
      • 从本地副本中删除 git 文件夹
      • 像往常一样提交新项目。

      之后,您可以从您的 github 帐户中删除分叉。花了我一分钟,工作就像一个魅力。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-22
        • 2015-04-13
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2018-11-14
        相关资源
        最近更新 更多