Git 配置一个本地仓库推送多个远端
场景
有时候一个本地仓库需要同时同步到多个远端,比如同一个仓库既推到 GitHub 触发 Action,也推到 Gitee 留档(以便网络不畅时访问)。
最直接的做法有两种:
给同一个 remote 配置多个 push 地址。
分别添加多个 remote,需要的时候手动推送到不同 remote。
这样既可以做到一次 git push,就推送到多个平台,也支持单独提交到某一远端。
配置同一个 remote 的多个 push 地址
假设现在有两个仓库地址:
git@github.com:xxx/xxx.git
git@gitee.com:xxx/xxx.git先保证 origin 的 fetch 地址是主仓库:
git remote set-url origin git@github.com:xxx/xxx.git然后给 origin 添加多个 push 地址:
git remote set-url --add --push origin git@github.com:xxx/xxx.git
git remote set-url --add --push origin git@gitee.com:xxx/xxx.git再查看配置:
git remote -v期望能看到类似结果:
origin git@github.com:xxx/xxx.git (fetch)
origin git@github.com:xxx/xxx.git (push)
origin git@gitee.com:xxx/xxx.git (push)这里的 origin 有一个 fetch 地址,但有两个 push 地址:
- 拉取代码时:从 GitHub 拉取。
- 推送代码时:同时推送到 GitHub 和 Gitee。
之后执行:
git push origin mainGit 就会依次把当前分支推送到 origin 的所有 push 地址。
注意,最好保持远端分支命名一致,以减少不必要的配置。
分别配置多个 remote
也可以把不同平台配置成独立 remote:
git remote add github git@github.com:xxx/xxx.git
git remote add gitee git@gitee.com:xxx/xxx.git这种方式适合需要明确控制推送目标的场景:
git push github main
git push gitee main缺点是每次同步多个平台时都要分别执行推送命令。
当然,如果既想保留多个 remote 方便单独控制,又希望常用 remote 可以一次推送到多个平台,可以给其中一个 remote 同时配置多个 pushurl,两种方式并不冲突,可以组合使用。
注意 pushurl 的覆盖规则
一旦给某个 remote 配置了 pushurl,Git 推送时就会使用 pushurl,而不是默认的 url。
所以如果希望同时推送到原来的 origin 地址和新增地址,需要把原来的地址也添加成 pushurl:
git remote set-url --add --push origin 原来的仓库地址
git remote set-url --add --push origin 新增的仓库地址不要只添加新增地址,否则 git push origin main 可能只会推送到新增仓库。
删除某个 push 地址
如果以后不想继续同步到某个远端,可以删除对应的 push 地址:
git remote set-url --delete --push origin git@gitee.com:xxx/xxx.git删除后再检查:
git remote -v总结
如果只是希望一条命令同步多个远端,可以参考 配置同一个 remote 的多个 push 地址。
如果希望分别推送多个远端,可以参考 分别配置多个 remote。