git命令行实现代码仓库迁移

132 阅读2分钟

公司一个客户的项目包给了一个供应商,现在公司打算收回来,原来代码库在供应商那,现在公司要把代码迁回公司,好在两边都是用的gitlab

需求描述

领导们经过讨论要求本次迁移最终要满足以下要求

  1. 代码包括所有分支都迁移
  2. 所有的历史提交记录也都要迁移
  3. 要有一段过度期,代码的提交还是在供应商代码库,随时同步到公司代码库

实现方法

操作方法如下:

# 在公司的gitlab上建立空仓库

# 将供应商的代码库克隆到本地
git clone old.git --bare

# 推代码送到公司新建立的仓库
git push new.git --all
git push new.git --tags

遇到的一些问题

删除远程分支

# 删除远程分支aaa
git push origin --delete aaa
git branch -dr origin/aaa

本地删除远程已删除过的分支

有这种情况,第一次克隆的代码,有a、b、c三个分支,现在远程库中有人把c分支删除了,这样你本地库的远程分支与远程库的分支不同步了

#查看远程分支和本地分支的对应关系
git remote show origin  

#删除远程已经删除过的分支
git remote prune origin 

缩小仓库体积

有这么一种情况,代码库中有个分支很占空间,把这个分支删除后,但是服务器上的代码仓库中的存储空间大小并未改变。现在的一个需求是如何删除远程仓库的分支并且使远程的仓库体积变小

在仓库执行git gcgit prue --expire命令可以移除不再被引用的对象。

这个还一知半解,待研究


git gc
git prune --expire=now
git push origin --force --all

总结

#查看本地及远程的所有分支
git branch -a       

#将某个远程主机的更新,全部取回本地:
git fetch   

#创建并切换分支
git checkout -b 分支

#根据远程分支创建本地分支并切换分支
git checkout -b 分支 origin/分支

#切换分支:
git checkout 分支 

#删除远程分支: 
git push origin -d 分支名  

#删除本地分支
git branch -d 分支名  

#查看远程分支和本地分支的对应关系
git remote show origin  

#删除远程已经删除过的分支
git remote prune origin