以下是一个安全的 Bash 脚本,用于将远程 Git 仓库的所有分支检出到本地(自动跳过已存在的分支):
#!/bin/bash# 获取所有远程分支(排除 HEAD)
remote_branches=$(git branch -r | grep -v 'HEAD\|->')# 循环处理每个远程分支
for branch in $remote_branches; do# 提取纯分支名(去掉 origin/ 前缀)local_branch=${branch#origin/}# 检查本地是否已存在该分支if git show-ref --quiet refs/heads/"$local_branch"; thenecho "分支 '$local_branch' 已存在,跳过"elseecho "创建本地分支: $local_branch (跟踪 $branch)"# 创建本地分支并设置跟踪git branch -q --track "$local_branch" "$branch"fi
doneecho "操作完成!当前所有远程分支已同步到本地"
使用说明:
-
保存脚本:将上述代码保存为
git-checkout-all.sh
-
添加执行权限:
chmod +x git-checkout-all.sh
-
在 Git 仓库根目录运行:
./git-checkout-all.sh
脚本特点:
-
自动过滤:
-
排除远程 HEAD 指针
-
跳过已存在的本地分支
-
-
安全操作:
-
不会覆盖现有分支
-
保持远程跟踪关系
-
-
清晰输出:
-
显示跳过的分支
-
显示新创建的分支
-
注意事项:
-
确保先执行
git fetch
获取最新远程分支列表 -
分支名包含特殊字符(如空格)时可能需要额外处理
-
如需强制覆盖已存在分支,请使用
-f
选项(谨慎使用):git branch -f --track "$local_branch" "$branch"
工作原理:
-
通过
git branch -r
获取所有远程分支 -
使用
grep -v
过滤掉 HEAD 指针 -
循环处理每个分支:
-
去除
origin/
前缀得到本地分支名 -
检查本地是否已存在同名分支
-
不存在时创建带跟踪关系的分支
-
提示:使用
git branch -vv
可查看所有本地分支及其跟踪关系
迁移步骤:
git remote rename origin old_origingit remote add origin xxxx.gitgit push -u origin --allgit push -u origin --tags