以下是一個安全的 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