如何克隆仓库的所有远程分支
git clone 默认已拉取所有分支的数据,只是只为默认分支建了本地分支。检出任意远程分支用 git checkout <分支名>。完整镜像用 git clone --mirror(裸仓库,含全部引用),迁移仓库时用它。
其实普通 git clone 已经把全部远程分支的数据拉下来了——git branch -r 能看到所有 origin/*,git checkout 分支名 即可为任一远程分支建本地分支。真正"把仓库完整镜像下来"(含所有分支、tag、引用)用 git clone --mirror。
普通克隆后检出其他分支
git clone https://github.com/org/repo.git
cd repo
git branch -r # 查看所有远程分支
git checkout develop # 自动建本地跟踪分支
批量为所有远程分支建本地分支
for b in $(git branch -r | grep -v HEAD | sed 's|origin/||'); do
git branch --track "$b" "origin/$b" 2>/dev/null
done
一般没必要这么做——用到哪个检出哪个更符合 Git 的习惯。
完整镜像(迁移仓库用)
git clone --mirror https://github.com/org/repo.git repo.git
# 得到裸仓库(无工作区),含所有分支/tag/引用
# 推到新远程完成迁移
cd repo.git
git push --mirror https://gitlab.com/org/repo.git
--mirror vs --bare:mirror 是"完全克隆包括远程跟踪引用",bare 只转换分支结构。迁移场景一律用 --mirror。
常见问题(FAQ)
Q:mirror 克隆的仓库能当日常工作目录用吗?
不适合——它是裸仓库没有工作区。日常用普通 clone;mirror 用于迁移和备份。
Q:迁移后旧仓库的 PR、Issues 会跟过去吗?
不会。Git 只管理代码与引用;Issues/PR/Wiki 是平台数据,GitHub→GitLab 这类迁移要用平台自带的导入工具。
Q:只想备份所有分支最简单的做法?
定时任务跑 git clone --mirror(首次)+ git remote update(增量),即可在另一台机器维持完整镜像。