git clone 所有分支,并push到另一个repo

本文介绍了如何将GitLab的私人项目迁移到GitHub,包括如何克隆并转换所有远程分支为本地分支,以及如何正确推送所有分支到新的GitHub仓库。步骤包括使用`git clone --bare`、解除`core.bare`模式、重命名远程origin以及推送所有分支和标签。
摘要由CSDN通过智能技术生成

总说

啥,github的私人项目免费了??赶紧把gitlab的私人项目迁移出来压压惊。这要求我们,首先将所有的分支从gitlab下载到本地,并且是本地分支,然后推送到github上去。但是,直接git clone的话,查看本地分支,竟然只有是master分支?我的天,但是我想要的是推送所有的分支到github上。咋整?

窘境

git clonegit branch为啥只看到了一个本地分支master。难道不会把所有分支都clone下来?
我们查看git branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branch1
  remotes/origin/branch2

但是,如果我们直接切换分支git checkout branch1
显示

分支 branch1 设置为跟踪来自 origin 的远程分支 branch1。
切换到一个新分支 'branch1'

啥,怎么这么诡异。为啥我能切换到远程分支?其实是这样的,git clone会将所有的远程分支都下载下来,但是就是把远程的master会变成本地的master分支。其他的远程分支,名字仍旧是远程分支,没有重新命名。一个个checkout?如果我项目有几十个分支,那我不要累死??

正确的解决方法:

将远端分支全部变成本地分支

首先将项目的所有分支clone下来,并且变成本地分支

mkdir some_repo
cd some_repo
git clone --bare https://xxx.git .git
git config --unset core.bare
git reset --hard

上面的意思是,首先随便建立一个文件夹some_repo,然后在里面只将xxx.git文件夹拷贝下来!此时,some_repo里面还是没有任何repo的文件,只有一个隐藏文件夹.git。然后解除core.bare模式,然后再恢复所有的repo文件。此时,所有的xxx的所有的分支都是本地分支了!

将本地分支全部推到远端

将所有的分支都推送到github上去
首先新建一个github项目。比如是yyy

别看github的提示了,完全在扯。
原始github教你的迁移方式:

git remote add origin https://github.com/your_name/yyy.git
git push -u origin master

这是干嘛,首先直接git remote add origin https://github.com/your_name/yyy.git 肯定会出错,因为你git clone下载的项目,其相应的远端分支remotes/origin是对应的是gitlab/xxx的位置。其次,这里git push -u origin master只是将当前分支推送到远端的master分支啊,这样github只会有一个master分支!

正确方法

git remote rename origin old_origin
git remote add origin https://github.com/your_name/yyy.git
git push -u origin --all
git push -u origin --tags

第一条命令,因为当前的默认remote的origin是gitlab的那个xxx,那么肯定要放弃那个,直接随便改个名字就行,比如这里改成old_origin。然后,再添加新的remote origin。然后,我们将所有的branch推到github上去,这里是用--all,不是master。最后一句话,是将tags也推上去。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值