ᵞᴼᵁ ᴳᴼᴺᴺᴬ ᴮᴱ ᴼᴷ

Git 仓库迁移到新远程

Posted on By gtahub

Git 仓库迁移到新远程

场景

需要将整个 Git 仓库(包括所有分支)从一个远程地址迁移到另一个远程地址。

步骤

1. 获取原仓库所有远程分支

git fetch origin

2. 在本地创建所有远程分支

for branch in $(git branch -r --format='%(refname:short)' | grep '^origin/' | grep -v '^origin/HEAD$' | cut -d'/' -f2-); do
  git checkout -b $branch origin/$branch 2>/dev/null || echo "skip: $branch"
done

说明:遍历所有远程分支,在本地逐一创建同名分支并关联到远程分支。已存在的分支会跳过。

3. 切换 origin 到新仓库地址

git remote set-url origin git_url

说明:修改本地仓库关联的远程地址,无需重新 clone。

4. 推送所有本地分支到新仓库

for branch in $(git branch --format='%(refname:short)'); do
  git push origin $branch 2>/dev/null || echo "failed: $branch"
done

说明:遍历所有本地分支,逐一推送到新的远程仓库。推送失败的分支会打印出来。

注意事项

  • 推送前确保新仓库已创建且有写入权限
  • 如果有 tag 需要迁移,额外执行 git push origin --tags
  • 如果新仓库是空的,直接推送即可;如果已有内容,可能需要先处理冲突