起因
公司搭建了自己的代码仓库,使用的gitlab,需要将github上面的代码迁移至本地gitlab仓库。
思路
1.在公司代码库建立一个新的代码库
2. 修改本地代码库的git remote地址
3. 提交代码到新的gitlab代码库
操作
因为公司使用git提交流程,需要先设置公司主仓库为上游,然后fetch,merge完成提交。所以还修改了git upstream地址。
-
先在gitlab上面新建主仓库,使用自己的账号fork主仓库代码。
-
本地修改git remote地址。
git remote remove origin # 删除远程仓库别名
git remote remove upstream # 删除上游仓库别名
git remote add origin git@....... # 添加新的仓库地址
git remote add upstream git@...... # 添加新的上游仓库地址
-
拉取上游和远程仓库
git pull origin master # 拉取远程仓库
git fetch upstream # fetch源分支的新版本到本地, 也就是更新upstream主仓库的代码.
git merge upstream/master # 合并主仓库更新的内容 -
提交本地未提交代码
git add . # 提交所有未提交内容到缓存区
git commit -m 'xxxx' # 为本次提交撰写评论信息<fort clolr='red'>! 必须</fort>
git push origin master # 提交代码到远程仓库
- 在gitlab界面提交PR请求.
遇到的问题
- 在上述第三步操作时,遇到了问题,错误信息如下:
$ git pull upstream
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'git仓库地址'
错误原因:访问被拒绝,本地最好配置ssh连接,不要使用http拉取。gitlab都有密码的。
- 在进行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 先拉取最新代码
- 在进行git pull时又遇到了问题.错误信息如下:
$ git pull origin master
From git仓库地址
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
错误原因:因为我们是在gitlab新建了一个仓库,然后将本地本身是github的代码提交过去,git提示我们不能将两个完全不相干的仓库合并。
解决方法就是加上·--allow-unrelated-histories·参数,参数含义是:强制将两个不相干的仓库合并。
总结
至此,迁移仓库的不完美解决方案就算完成了。
上述只是git操作中的沧海一粟,只有通过不断的学习,才能进步。