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

背景:我有一个存储库,其中包含三个独立的应用程序。事情并不是这样开始的。原本只有一个应用程序在回购。然而,随着时间的推移,业务需求发生了变化。一个应用变成了两个(一个遗留版本和一个重写版本)。添加了web服务。单独的分支被用来包含这三个项目。但是,它们不共享任何代码。所以把它们分成自己的回购会更简单。


git clone -b new-project /path/to/repo /new/repo/path

编辑:在GitHub中,你可以“fork”回购,然后转到克隆的管理选项卡。在“存储库名称”和“可见性”下面是“默认分支”和一个分支的下拉菜单。选择新项目。

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

在GitHub上,克隆它们/repo到你/repo。 运行git clone git@github.com:you/repo.git gitk开始。 [你可能想要创建一个旧master分支,这样你就不会失去旧提交的跟踪。] 在新项目分支上找到最近的提交,右键单击提交消息,并选择“Reset master branch to here”。(你也可以在命令行中使用git-reset来实现这一点,但我还没有找到正确的调用方法。)

你的下一个推送到你的GitHub回购将需要用——force选项完成,但否则你就完成了。

如果这是你自己的回购,你这么做是为了…

运行git clone git@github.com:you/ origin .git 执行命令git clone orig copy 正如我上面所描述的,但是在本地副本回收中,将主分支重置到您想要的位置。 创建一个空的GitHub项目。按照GitHub上的说明,将该项目设置为本地版本的复制、推送master的远程,然后就完成了!


不确定这是不是一个好方法,但无论如何都很简单:

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

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


我从@user292677的想法开始,改进它来解决我的问题:

在github中创建new-repo。 CD到您想从中提取的旧回购的本地副本,该副本被设置为跟踪将成为新回购主库的新项目分支。 $ git推送https://github.com/accountname/new-repo.git +new-project:master

新的Github回购完成。结果是;

一个名为new-repo的Github新仓库, 旧回购的新项目与谁的master对应 所有的历史都保存了下来。

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

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

结果是,现有的site3a分支现在也移动到新的回购中,并将显示为rails3。这工作得非常好:网络图显示了新的主服务器和rails3的完整历史和彼此之间的正确关系。

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

更新2018-01-11:更新步骤3。使用GitHub推荐https协议。配方仍然有效。


请记住,当您只是创建一个新的repo时,您将失去对旧repo的引用,并且使对原始项目的任何更新都难以与新repo同步。也许把回购的钱分叉不是更好吗?


更新:

CD到本地回购包含old_branch和:

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

在github中创建NEW_REPOSITORY。 cd OLD_REPOSITORY git推送https://github.com/accountname/NEW_REPO +master:master

这就是全部。(注意:git历史保存)

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

来源:Mauricio Aiello,前Java高级开发人员,https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a-branch-in-an-existing-repository


如果你爱上了SourceTree,只需做一些简单的步骤

检查品牌你想克隆为新的回购 打开终端上的该品牌通过点击终端上的按钮 SourceTree中的工具栏 将命令发送到终端$ git push https://github.com/accountname/new_repo.git

git命令基于Alexey Kislitsin的回答。谢谢Alexey Kislitsin