我有主和新项目分支。现在我想基于新项目分支与其主人创建一个全新的回购。
背景:我有一个包含三个独立应用程序的存储库。它没有这样开始。回购中最初只有一个应用程序。但是,随着时间的推移,业务需求已发生变化一个应用程序成为两个(遗留版本和重写。)添加了一个Web服务。使用单独的分支来包含这三个项目。但是,他们不共享任何代码。因此将它们拆分成自己的回购更简单。
答案 0 :(得分:247)
我从@ user292677的想法开始,并对其进行了改进以解决我的问题:
$ git push https://github.com/accountname/new-repo.git +new-project:master
新的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
分支,而不仅仅是“默认”分支。所以......
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
分支重置为您想要的位置。 you/copy
。按照GitHub上的说明将该项目设置为本地版copy
的远程项目,推送master
,然后就完成了!答案 3 :(得分:2)
就是这样。 (注意: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获取“克隆或下载”下拉菜单