如何从现有仓库中的分支创建新的GitHub仓库?

Dog*_*her 152 git branch github

我有主人新项目分支机构.现在我想基于新项目分支与其主人创建一个全新的回购.

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

Dog*_*her 266

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

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

新的Github回购已经完成.结果是;

  • 一个名为new-repo的新Github存储库,
  • master对应于老回购的新项目,以
  • 保留所有历史.

事实上,我发现通过使用这种方法,我可以使用精选的分支创建新的仓库,并按我的意愿重命名:

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

结果是预先存在的site3a分支现在也被移动到新的repo并将显示为rails3.这个作品真的很好:网络图显示了新的主人Rails3中有充分的历史和对于彼此的正确关系.

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

更新2018-01-11:更新了步骤3.对https协议使用GitHub建议.食谱仍然有效.

  • Dogweather,我使用的解决方案比我记忆中的要多.谢谢!在我为此工作之前,我必须先检查old_branch (5认同)
  • 为了清楚起见,请在 Git bash 上使用:````git push [用于克隆的存储库的 SSH 地址] +[旧存储库分支名称]:[新存储库分支名称]```。如果您要复制整个存储库,则旧的和新的存储库分支名称可能是 **master**。 (4认同)
  • 请注意,这不会复制标签.我相信你可能需要`--follow-tags`. (3认同)

Ale*_*sin 22

更新:

cd到包含old_branch的本地repo和:

$ git push https://github.com/accountname/new_repo.git +old_branch:master
Run Code Online (Sandbox Code Playgroud)


J. *_*mon 9

git clone -b new-project /path/to/repo /new/repo/path
Run Code Online (Sandbox Code Playgroud)

编辑:在GitHub中,您可以"分叉"回购,然后转到克隆中的"管理"选项卡."存储库名称"和"可见性"下方是"默认分支",带有分支下拉菜单.选择new-project.

重新编辑:我刚刚意识到它是master你想要设置的分支,而不仅仅是"默认"分支.所以…

  • 在GitHub上,克隆them/repoyou/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,您就完成了!


Joe*_*Joe 9

  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 - 现有存储库中的分支

  • 这实际上比公认的答案更有用。即使在 Git 在无法将旧存储库推送到新存储库时抱怨 src refspec 错误的情况下,它也能工作。 (3认同)
  • 值得注意的是,这是将 master 推入 master,如果你想推送特定分支,请执行 ...+{old_branch_name}:{new_branch_name} (2认同)