我有主项目分支和新项目分支。现在我想创建一个全新的回购与它的主人基于新项目分支。
背景:我有一个存储库,其中包含三个独立的应用程序。事情并不是这样开始的。原本只有一个应用程序在回购。然而,随着时间的推移,业务需求发生了变化。一个应用变成了两个(一个遗留版本和一个重写版本)。添加了web服务。单独的分支被用来包含这三个项目。但是,它们不共享任何代码。所以把它们分成自己的回购会更简单。
我有主项目分支和新项目分支。现在我想创建一个全新的回购与它的主人基于新项目分支。
背景:我有一个存储库,其中包含三个独立的应用程序。事情并不是这样开始的。原本只有一个应用程序在回购。然而,随着时间的推移,业务需求发生了变化。一个应用变成了两个(一个遗留版本和一个重写版本)。添加了web服务。单独的分支被用来包含这三个项目。但是,它们不共享任何代码。所以把它们分成自己的回购会更简单。
当前回答
如果你爱上了SourceTree,只需做一些简单的步骤
检查品牌你想克隆为新的回购 打开终端上的该品牌通过点击终端上的按钮 SourceTree中的工具栏 将命令发送到终端$ git push https://github.com/accountname/new_repo.git
git命令基于Alexey Kislitsin的回答。谢谢Alexey Kislitsin
其他回答
我从@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协议。配方仍然有效。
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的远程,然后就完成了!
更新:
CD到本地回购包含old_branch和:
$ git push https://github.com/accountname/new_repo.git +old_branch:master
请记住,当您只是创建一个新的repo时,您将失去对旧repo的引用,并且使对原始项目的任何更新都难以与新repo同步。也许把回购的钱分叉不是更好吗?
不确定这是不是一个好方法,但无论如何都很简单:
git clone -b new-project git@github.com:User/YourProject.git newProjcet
然后在github上创建一个新的repo,并推送它。