從origin1推送到origin2
git push origin2 'refs/remotes/origin1/*:refs/heads/*'
# 推送后帶有后綴demo01
git push origin2 'refs/remotes/origin1/*:refs/heads/demo01/*'
# 推送指定分支
git push origin2 'refs/remotes/origin1/dev:refs/heads/dev'
拉取所有分支到本地
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
拉取所有標簽到本地
git fetch origin --prune
切換遠程倉庫
推送所有分支
git push --mirror
推送所有標簽
git push origin --tags
git遷移腳本
#!/bin/bash
export oldUrl=$1
export newUrl=$2
export repoName=$3
printf "oldUrl: %s\nnewUrl: %s\nrepoName: %s\n" $oldUrl $newUrl $repoName
[[ -z "${oldUrl}" ]] && echo "不能為空" && exit
[[ -z "${newUrl}" ]] && echo "不能為空" && exit
[[ -z "${repoName}" ]] && echo "不能為空" && exit
printf "克隆原倉庫"
cd repo || exit
git.exe clone --progress -v "${oldUrl}"
cd ${repoName} || exit
#git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
#git fetch --all
#git pull --all
#git fetch origin --prune
# 原倉庫
# dev -> dev-origin
# git remote change new repo
echo "增加新倉庫"
git remote rename origin origin-old
git remote add origin "${newUrl}"
echo "拉取所有倉庫分支"
git fetch origin
git fetch origin-old
echo "刪除本地dev分支"
git branch -D dev
# origin/dev -> origin/dev-bak
echo "備份分支"
git checkout -b dev-origin origin-old/dev
git checkout -b dev-yanshi4-11 origin-old/yanshi4-11
git checkout -b dev-bak origin/dev
echo "新倉庫切出dev分支"
git checkout -b dev origin/dev
echo "復制ci配置到臨時文件"
mkdir -p ../tmp/ || exit
cp .gitlab-ci.yml Dockerfile ../tmp/ || exit
echo "切回舊倉庫dev分支"
git checkout master
git branch -D dev
git checkout -b dev origin-old/yanshi4-11
echo "配置ci配置"
mv -f ../tmp/* ./ || exit
mv -f ../tmp/.gitlab-ci.yml ./ || exit
git add .
git commit -m "ci適配"
echo "刪除舊倉庫遠程配置,防止誤刪"
git remote remove origin-old
echo "推送所有分支"
git push --progress "origin" dev-origin
git push --progress "origin" dev-yanshi4-11
git push --progress "origin" dev-bak
git push --force --progress "origin" dev:dev