记录从Github迁移到Gitlab(非最优解)

起因

公司搭建了自己的代码仓库,使用的gitlab,需要将github上面的代码迁移至本地gitlab仓库。

思路

1.在公司代码库建立一个新的代码库
2. 修改本地代码库的git remote地址
3. 提交代码到新的gitlab代码库

操作

因为公司使用git提交流程,需要先设置公司主仓库为上游,然后fetch,merge完成提交。所以还修改了git upstream地址。

  1. 先在gitlab上面新建主仓库,使用自己的账号fork主仓库代码。

  2. 本地修改git remote地址。

git remote remove origin # 删除远程仓库别名  
git remote remove upstream # 删除上游仓库别名  
git remote add origin git@....... # 添加新的仓库地址  
git remote add upstream git@...... # 添加新的上游仓库地址  
  1. 拉取上游和远程仓库
    git pull origin master # 拉取远程仓库
    git fetch upstream # fetch源分支的新版本到本地, 也就是更新upstream主仓库的代码.
    git merge upstream/master # 合并主仓库更新的内容

  2. 提交本地未提交代码

git add . # 提交所有未提交内容到缓存区  
git commit -m 'xxxx' # 为本次提交撰写评论信息<fort clolr='red'>! 必须</fort>  
git push origin master # 提交代码到远程仓库  
  1. 在gitlab界面提交PR请求.

遇到的问题

  1. 在上述第三步操作时,遇到了问题,错误信息如下:
$ git pull upstream   
remote: HTTP Basic: Access denied   
fatal: Authentication failed for 'git仓库地址'   

错误原因:访问被拒绝,本地最好配置ssh连接,不要使用http拉取。gitlab都有密码的。

  1. 在进行git push时遇到的问题,错误信息如下:
$ git push origin master   
To git仓库地址 
 ! [rejected]        master -> master (fetch first)  
error: failed to push some refs to 'git仓库地址'   
hint: Updates were rejected because the remote contains work that you do   
hint: not have locally. This is usually caused by another repository pushing   
hint: to the same ref. You may want to first integrate the remote changes   
hint: (e.g., 'git pull ...') before pushing again.   
hint: See the 'Note about fast-forwards' in 'git push --help' for details.   

错误原因:本地代码相对于远程仓库不是最新的代码,需要使用git pull origin xxx 先拉取最新代码

  1. 在进行git pull时又遇到了问题.错误信息如下:
$ git pull origin master  
From git仓库地址  
 * branch            master     -> FETCH_HEAD    
fatal: refusing to merge unrelated histories  

错误原因:因为我们是在gitlab新建了一个仓库,然后将本地本身是github的代码提交过去,git提示我们不能将两个完全不相干的仓库合并。
解决方法就是加上·--allow-unrelated-histories·参数,参数含义是:强制将两个不相干的仓库合并。
! 此操作风险较大,必须保证gitlab新仓库没有代码,不然合并过程中可能出现冲突

总结

至此,迁移仓库的不完美解决方案就算完成了。

上述只是git操作中的沧海一粟,只有通过不断的学习,才能进步。