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

时间:2012-03-02 04:30:45

标签: git github branch

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

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

7 个答案:

答案 0 :(得分:247)

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

  1. 在github中创建 new-repo
  2. cd到您要从中提取的旧回购的本地副本,该副本设置为跟踪将成为 new-repo 新项目分支的主人。
  3. $ git push https://github.com/accountname/new-repo.git +new-project:master
  4. 新的Github回购已经完成。结果是;

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

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

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

    结果是预先存在的 site3a 分支现在也移动到新的仓库,并显示为 rails3 。这非常有效:网络图显示了新的 rails3 ,其中包含完整的历史记录以及彼此之间的正确关系。

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

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

答案 1 :(得分:20)

更新

cd到包含old_branch的本地仓库,并且:

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

答案 2 :(得分:8)

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 repo中,将master分支重置为您想要的位置。
  • 创建空的GitHub项目you/copy。按照GitHub上的说明将该项目设置为本地版copy的远程项目,推送master,然后就完成了!

答案 3 :(得分:2)

  1. 在github中创建NEW_REPOSITORY。
  2. cd OLD_REPOSITORY
  3. git push https://github.com/accountname/NEW_REPO + master:master
  4. 就是这样。 (注意:git历史保留)

    我尝试过上面的答案并发现它不够具体,因为它没有指定+ master:master这是我需要使它工作的东西。它很棒。

    Source(我修改以避免使用github的ssh问题):Mauricio Aiello,前Java高级开发人员,https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a-branch-in-an-existing-repository

答案 4 :(得分:1)

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

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

然后在github上创建一个新的repo并推送它。

答案 5 :(得分:1)

请记住,当您只是创建一个新的仓库时,您将失去对旧仓库的引用,并且难以维持与原始项目同步的任何更新。叉子回购可能不是更好吗?

答案 6 :(得分:0)

对正确答案的补充:

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

“git@github.com:accountname / new_repo”=>从github获取“克隆或下载”下拉菜单