如何克隆仓库的所有远程分支

普通 git clone 通常获取可见且 refspec 覆盖的分支历史,默认只建立一个本地分支;浅克隆等会限制范围。检出任意远程分支用 git checkout <分支名>。git clone --mirror 镜像可见引用;迁移前须确认目标可被覆盖,LFS 和子模块另行处理。

最佳实践
Git 分支协作与合并示意

其实普通 git clone 通常获取服务器可见且 fetch refspec 覆盖的远程分支历史;浅克隆、single-branch、partial clone 和访问权限会限制范围——git branch -r 能看到本地已有的 origin/* 跟踪引用,git checkout 分支名 即可为任一远程分支建本地分支。镜像服务器可见引用可用 git clone --mirror;隐藏引用、LFS 和子模块不在此保证内。

普通克隆后检出其他分支

git clone https://github.com/org/repo.git
cd repo
git branch -r              # 查看所有远程分支
git checkout develop       # 自动建本地跟踪分支

批量为所有远程分支建本地分支

git for-each-ref --format='%(refname:strip=3) %(symref)' refs/remotes/origin/ |
while read -r branch symbolic; do
  [ -n "$symbolic" ] && continue
  git show-ref --verify --quiet "refs/heads/$branch" && continue
  git branch --track "$branch" "origin/$branch" || exit 1
done

一般没必要这么做——用到哪个检出哪个更符合 Git 的习惯。

完整镜像(迁移仓库用)

git clone --mirror https://github.com/org/repo.git repo.git
# 得到裸仓库(无工作区),含所有分支/tag/引用

# 仅向确认可被完整替换的目标迁移;mirror 会强制更新并删除目标多余引用
cd repo.git
git push --mirror https://gitlab.com/org/repo.git

--mirror vs --bare:mirror 是"完全克隆包括远程跟踪引用",bare 只转换分支结构。仅在确实需要镜像所有可见引用且目标允许覆盖时使用 --mirror;平台隐藏引用、LFS 对象和子模块仓库仍需单独处理。

常见问题(FAQ)

Q:mirror 克隆的仓库能当日常工作目录用吗?

不适合——它是裸仓库没有工作区。日常用普通 clone;mirror 用于迁移和备份。

Q:迁移后旧仓库的 PR、Issues 会跟过去吗?

不会。Git 只管理代码与引用;Issues/PR/Wiki 是平台数据,GitHub→GitLab 这类迁移要用平台自带的导入工具。

Q:只想备份所有分支最简单的做法?

定时任务跑 git clone --mirror(首次)+ git remote update(增量),可维护引用镜像,但远端删除/改写也可能被同步,不等于有历史留存的备份;需另做不可变快照和恢复验证。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台