
在日常开发中,将同一个代码库同时同步至 Gitee (做国内加速/备份)和 GitHub(面向全球受众)是一个非常普遍的需求。
本文将为你梳理三种实现一键多推的方案 ,并详细说明如何在命令行 、TortoiseGit (小乌龟) 以及 SourceTree 中进行配置,最后针对只推送成功了一边和 SSH 认证权限报错提供具体的排查对策。
一、 方案 1:单 Remote 绑定多 Push URLs(最推荐)
这是最优雅、最主流的做法。其原理是给同一个远程仓库别名(通常是 origin)绑定多个推送地址(pushurl)。
1. 命令行 (Command Line) 配置方法
打开终端或 Git Bash,进入你的项目根目录,依次运行以下命令:
bash
# 1. 假设你目前已经关联了主仓库(比如 Gitee)
# 2. 为 origin 添加 GitHub 的推送地址
git remote set-url --add --push origin git@github.com:your-username/your-repository.git
# 3. 再为 origin 补上原本的 Gitee 推送地址(以防原默认推送被覆盖)
git remote set-url --add --push origin git@gitee.com:your-username/your-repository.git
验证配置 :
运行 git remote -v,若显示如下,说明配置成功:
text
origin git@gitee.com:your-username/your-repository.git (fetch)
origin git@github.com:your-username/your-repository.git (push)
origin git@gitee.com:your-username/your-repository.git (push)
推送命令 :
直接运行 git push origin master,Git 会自动串行对两个仓库发起推送。
2. TortoiseGit (小乌龟) 配置方法
-
在项目空白处右键 ,选择 TortoiseGit -> Settings (设置)。
-
在左侧菜单中依次展开 Git -> 选中 Remote (远程)。
-
在右侧 Remote 列表中选中
origin。 -
点击右下角的
Edit local .git/config(编辑本地配置文件)。 -
在打开的记事本中,找到
[remote "origin"]段落,添加pushurl行:ini[remote "origin"] url = git@gitee.com:your-username/your-repository.git fetch = +refs/heads/*:refs/remotes/origin/* pushurl = git@gitee.com:your-username/your-repository.git pushurl = git@github.com:your-username/your-repository.git -
保存关闭记事本,应用并确定设置。
3. SourceTree 配置方法
由于 SourceTree 的常规图形界面中同样没有为单个 Remote 提供直接的多行 pushurl 编辑框,我们推荐通过以下方式在其界面内快速修改配置:
- 在 SourceTree 中打开你的项目。
- 点击右上角的 Repository (仓库) -> Repository Settings (仓库设置)。
- 在弹出的窗口中,选择 Remotes (远程) 选项卡。
- 点击右侧的 Edit Config File... (编辑配置文件) 按钮。这会直接调用文本编辑器打开项目的本地 Git 配置文件。
- 同上,在
[remote "origin"]段落下添加两行pushurl并保存关闭即可。
!TIP
配置完成后,在 SourceTree 顶部点击 Push (推送) 按钮,直接勾选本地分支并确定,SourceTree 的进度弹窗同样会依次向两个平台进行推送。
二、 方案 2:独立 Remote 别名 + 批处理脚本(灵活控制)
如果你希望保留独立性,可以给 Gitee 和 GitHub 赋予两个完全独立的 Remote 别名,再利用自动化脚本实现一键串联推送。
1. 配置两个独立的 Remotes
bash
git remote add gitee git@gitee.com:your-username/your-repository.git
git remote add github git@github.com:your-username/your-repository.git
2. 编写一键推送脚本 (Batch/Shell)
在项目根目录下创建一个 push_all.bat (Windows 环境) 脚本文件:
bat
@echo off
echo ===========================================
echo 开始推送代码至 Gitee 和 GitHub...
echo ===========================================
:: 获取当前当前分支名,默认为 master
set branch=master
if not "%1"=="" set branch=%1
echo 推送至 Gitee [%branch%]...
git push gitee %branch%
echo.
echo 推送至 GitHub [%branch%]...
git push github %branch%
echo.
echo 同步完成!
pause
- 使用方式 :未来有改动提交后,直接在根目录双击运行
push_all.bat即可,或者在命令行运行push_all.bat dev将特定分支(如dev)推送至多端。
三、 方案 3:使用 Git Alias 别名封装(命令行极客首选)
通过自定义 Git Alias 别名,可以将复杂的多个推送指令绑定到一个自定义的全局或本地 Git 命令行上,非常利于纯命令行开发者。
1. 配置多端别名
同方案 2,首先确保你本地绑定了两个独立的 Remote 链接(如 gitee 和 github):
bash
git remote add gitee git@gitee.com:your-username/your-repository.git
git remote add github git@github.com:your-username/your-repository.git
2. 注册 Git Alias 自定义指令
在终端运行以下命令,为 Git 注册一个名为 pushall 的全局命令:
bash
git config --global alias.pushall "!git push gitee && git push github"
- 命令解释 :
!符号告诉 Git 该别名是一个外部的 shell 命令组合,它会先执行向gitee的推送,成功后紧接着执行向github的推送。
3. 如何使用?
未来在任何需要推送的仓库下,只需在终端敲下:
bash
git pushall
Git 就会像内置命令一样,自动一键同步多端!
四、 场景处理:只推送成功了一个平台,如何补推?
情况:在本地修改已全部 Commit 提交后,因为之前未配双推或者某一侧连接报错,只推到了 Gitee,而 GitHub 尚未同步。
解决办法:直接再次发起 Push
Git 在检测本地更新时,会对每个 pushurl 或 remote 目的地进行独立校验。
- 针对方案 1 :直接在小乌龟右击选择 Push,或者运行
git push origin master。Git 会对已同步的 Gitee 提示Everything up-to-date,并自动把所有历史提交同步推送给先前缺失的 GitHub 平台。 - 针对方案 2 & 3 :直接单独执行
git push github master或者是运行你的pushall命令补推即可。
五、 突发排查:解决 SSH 公钥拒绝 (Permission denied) 报错
如果推送 GitHub 时报 Permission denied (publickey) 错误,可用以下几种方式排查:
1. 将 TortoiseGit 的 SSH 客户端换为原生 OpenSSH
小乌龟默认使用 PuTTY 的 Plink 客户端进行 SSH 握手,它无法读取 OpenSSH 的默认密钥(即 C:\Users\用户名\.ssh\id_rsa)。
- 解决 :在 TortoiseGit Settings -> Network -> SSH client 处,将路径改为 Git 安装目录下的
ssh.exe(通常在C:\Program Files\Git\usr\bin\ssh.exe)。
2. 为多套 SSH Key 配置路由规则 (config 文件)
如果你为 Gitee 和 GitHub 分别生成了不同的密钥(如 id_rsa_gitee 和 id_rsa_github):
-
在
C:\Users\你的用户名\.ssh\目录下新建一个名为config(无后缀名)的文本文件。 -
填入路由规则:
textHost gitee.com HostName gitee.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_github
3. 保底方案:改用 HTTPS 地址
将你本地配置中的 GitHub SSH 链接:git@github.com:your-username/your-repository.git
直接替换为 HTTPS 链接:https://github.com/your-username/your-repository.git
保存后再次推送。此时系统会提示你进行弹窗登录授权,授权完毕即可瞬间成功推送,彻底绕过复杂的 SSH 凭证配置。