【问题标题】:How do I create a new GitHub repo from a branch in an existing repo?如何从现有仓库中的分支创建新的 GitHub 仓库?
【发布时间】:2012-03-02 04:30:45
【问题描述】:

我有 ma​​sternew-project 分支。现在我想创建一个全新的 repo,它的 master 基于 new-project 分支。

背景:我有一个包含三个独立应用程序的存储库。它不是这样开始的。最初在 repo 中只有一个应用程序。然而,随着时间的推移,业务需求发生了变化。一个应用程序变成了两个应用程序(一个旧版本和一个重写版本)。添加了一个 Web 服务。单独的分支用于包含三个项目。但是,它们不共享任何代码。因此,将它们拆分为自己的存储库会更简单。

【问题讨论】:

    标签: git github branch


    【解决方案1】:

    我从@user292677 的想法开始,并对其进行了改进以解决我的问题:

    1. 在 github 中创建 new-repo
    2. cd 到您要从中提取的旧仓库的本地副本,该副本设置为跟踪将成为 new-reponew-project 分支的主人。
    3. $ git push @987654321@ +new-project:master

    新的 Github repo 已经完成。结果是;

    • 一个名为 new-repo 的新 Github 存储库,
    • master对应于旧repo的new-project,带有
    • 保留所有历史记录。

    事实上,我发现通过使用这种方法,我可以使用精选的分支创建新的 repo,并根据需要重命名:

    $ git push git@github.com:accountname/new_repo +new-project:master +site3a:rails3

    结果是预先存在的 site3a 分支现在也移动到了新的存储库,并将显示为 rails3。这非常有效:网络图显示了新的 ma​​sterrails3 具有完整的历史记录以及它们之间的正确关系。

    2013-12-07 更新:将其用于另一个项目,并验证此配方仍然有效。

    2018 年 1 月 11 日更新:更新了第 3 步,将 GitHub 推荐用于 https 协议。配方仍然有效。

    【讨论】:

    • 嗨@Dogweather,感谢分享。您能解释一下您的方法和更改原始远程 url、推送到新的 repo 方法有什么不同吗?
    • Dogweather,我使用您的解决方案的次数超出了我的记忆。谢谢!在这对我有用之前,我必须先检查 old_branch
    • 请注意,这不会复制标签。我相信你可能需要--follow-tags
    • 请注意,您不需要在 Github 上创建 repo,您​​可以将 push 发送到本地(即 git init 而不是 Github > New > ...)
    • 为了清楚起见,请在 Git bash 上使用:git push [SSH address of repo for clone] +[old repo branch name]:[new repo branch name]。如果您要复制整个 repo,旧的和新的 repo 分支名称可能是 master
    【解决方案2】:

    更新:

    cd 到包含 old_branch 的本地 repo 和:

    $ git push https://github.com/accountname/new_repo.git +old_branch:master
    

    【讨论】:

      【解决方案3】:
      1. 在 github 中创建 NEW_REPOSITORY。
      2. cd OLD_REPOSITORY
      3. git push https://github.com/accountname/NEW_REPO +master:master

      仅此而已。 (注意:git历史保存)

      我已经尝试了上面的答案,但发现它不够具体,因为它没有指定 +master:master 这是我使它工作所需的。效果很好。

      来源(我为避免 github 出现 ssh 问题而进行了修改):Mauricio Aiello,前 Java 高级开发人员,https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a-branch-in-an-existing-repository

      【讨论】:

      • 这实际上比公认的答案更有用。它甚至在 Git 无法将旧版本推送到新版本库时抱怨 src refspec 错误的情况下也能正常工作。
      • 值得注意的是,这是将 master 推送到 master,如果你想推送特定的分支,请执行 ...+{old_branch_name}:{new_branch_name}
      【解决方案4】:
      git clone -b new-project /path/to/repo /new/repo/path
      

      编辑:在 GitHub 中,您可以“分叉”存储库,然后转到克隆中的“管理”选项卡。在“存储库名称”和“可见性”下方是“默认分支”,其中包含分支的下拉菜单。选择new-project

      重新编辑:我刚刚意识到这是您要设置的 master 分支,而不仅仅是“默认”分支。所以……

      • 在 GitHub 上,将 them/repo 克隆到 you/repo
      • 运行git clone git@github.com:you/repo.git
      • 开始gitk
      • [您可能想要创建一个old-master 分支,这样您就不会忘记旧的提交。]
      • new-project 分支上找到最近的提交,右键单击提交消息,然后选择“将主分支重置到此处”。 (您也可以在命令行中使用 git-reset 执行此操作,但我还没有找到正确的调用方法。)

      您需要使用--force 选项完成对 GitHub 存储库的下一次推送,否则您就完成了。

      如果这是您自己的存储库之一,您这样做是为了……

      • 运行git clone git@github.com:you/orig.git
      • 运行git clone orig copy
      • 如上所述,但在本地 copy 存储库中,将 master 分支重置到您想要的位置。
      • 创建空的 GitHub 项目you/copy。按照 GitHub 上的说明将该项目设置为您本地版本的copy 的远程,推送master,您就完成了!

      【讨论】:

      • 嗯!我不确定如何做第一步:在 github 中克隆一个 repo。我认为这是不可能的。
      • @Dogweather,在 GitHub 上称为“分叉”;为了清楚起见,我编辑了我的答案。
      • 我无法在一个帐户中创建一个 repo。你自己试过吗?
      【解决方案5】:

      不确定这是否是一个好方法,但无论如何都很容易:

      git clone -b new-project git@github.com:User/YourProject.git newProjcet
      

      然后在github上新建一个repo,然后推送。

      【讨论】:

        【解决方案6】:

        请记住,当您简单地创建一个新的存储库时,您会失去对旧存储库的引用,并且使维护与新项目同步的原始项目的任何更新变得更加困难。分叉 repo 不是更好吗?

        【讨论】:

          猜你喜欢
          • 2022-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          • 1970-01-01
          • 2021-04-09
          相关资源
          最近更新 更多