IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

如何迁移一个Git仓库

颜海镜 2021-04-26 07:49:50 累计浏览 1,930 次
本机暂存

   最近要把 Git 仓库迁移,看有些同学迁移中不太顺利,自己研究总结了下,分享给大家,本文将向大家介绍迁移 Git 仓库的的方法

直接PUSH

   有同学说,这不是很简答么,像下面这样不就好了?

$ git remote add remote2 xxx$ git push --all remote2 

   上面做法的问题在于只能把本地存在的分支推送到remote2,一般公共仓库的话,我们本地都不会有全部远端分支的引用

   那怎么办?别急,这事其实还不太简单,下面先来研究下push命令,平时推送分支,我们都是直接 push

$ git push

   其实 git 在 push 时会自动填充填充缺省参数,比如上面的命令完整命令应该是下面这样

$ git push origin branch # 自动填充源 origin 以及当前分支 branch

   git在push时除了自动填充参数,还会自动展开分支,上面的命令展开后如下

$ git push origin refs/heads/branch:refs/heads/branch

   查看下.git下的refs目录,就会发现git会把远端的分支存放在remotes目录

.git/refs/remotes/origin/xxx

   那我们可以用下面的命令进行仓库迁移

$ git push remote2 refs/remotes/origin/*:refs/heads/*

   但这样做还有个问题不能解决,就是tag引用还是丢失了,下面介绍的方法可以解决这个问题

裸仓库

   git有一个裸仓库的概念,只要在克隆时建一个-bare参数即可

$ git clone --bare xxx

   裸仓库是没有工作目录的,克隆完的仓库只有.git下的内容,同时也不能再做更新工作

   但裸仓库可以再次push到另一个源,刚好可以完成我们仓库迁移的任务

$ git remote add remote2 xxx$ git push --mirror remote2

镜像仓库

   镜像仓库和裸仓库类似,但裸仓库不能更新,镜像仓库可以实现后续的更新工作

   镜像仓库的创建只需要在克隆的时候加上-mirror参数即可

$ git clone --mirror xxx

   镜像仓库的push操作和裸仓库一样,也可以完成我们仓库迁移的任务

$ git remote add remote2 xxx$ git push --mirror remote2

总结

   本文总结了git迁移仓库的不同方法和区别,迁移源的问题,推荐大家使用裸仓库的方法,希望同学们遇到问题可以多思考多总结

参考资料

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Git常用命令备忘 (累计阅读 54,693)
  2. Git log diff config高级进阶 (累计阅读 24,840)
  3. Git subtree 要不要使用 –squash 参数 (累计阅读 23,395)
  4. 我的git笔记 (累计阅读 20,259)
  5. 调试工具之GDB (累计阅读 14,826)
  6. 公司倒了,请让领导先走 (累计阅读 13,406)
  7. 强制刷新本地 DNS 缓存记录 (累计阅读 10,914)
  8. 别为大公司拼命(译文) (累计阅读 10,295)
  9. Linux date 命令获取某日期的前一天 (累计阅读 9,879)
  10. ps 命令常见用法 (累计阅读 9,499)