【Git 实战】三类方案实现一键推送多端仓库(Gitee & GitHub)

在日常开发中,将同一个代码库同时同步至 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 (小乌龟) 配置方法

  1. 在项目空白处右键 ,选择 TortoiseGit -> Settings (设置)

  2. 在左侧菜单中依次展开 Git -> 选中 Remote (远程)

  3. 在右侧 Remote 列表中选中 origin

  4. 点击右下角的 Edit local .git/config (编辑本地配置文件)

  5. 在打开的记事本中,找到 [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
  6. 保存关闭记事本,应用并确定设置。


3. SourceTree 配置方法

由于 SourceTree 的常规图形界面中同样没有为单个 Remote 提供直接的多行 pushurl 编辑框,我们推荐通过以下方式在其界面内快速修改配置:

  1. 在 SourceTree 中打开你的项目。
  2. 点击右上角的 Repository (仓库) -> Repository Settings (仓库设置)
  3. 在弹出的窗口中,选择 Remotes (远程) 选项卡。
  4. 点击右侧的 Edit Config File... (编辑配置文件) 按钮。这会直接调用文本编辑器打开项目的本地 Git 配置文件。
  5. 同上,在 [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 链接(如 giteegithub):

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_giteeid_rsa_github):

  • C:\Users\你的用户名\.ssh\ 目录下新建一个名为 config(无后缀名)的文本文件。

  • 填入路由规则:

    text 复制代码
    Host 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 凭证配置。

相关推荐
yurenpai(27届找实习中)1 小时前
IntelliJ IDEA 项目推送到 Gitee 完整教程
gitee
星栈独行1 小时前
10 分钟跑起第一个 Makepad 应用:先把窗口开起来
前端·程序人生·ui·rust·开源·github
摇滚侠1 小时前
git ignore 忽略 .idea 目录 全新项目(尚未提交过 .idea).idea 已经被 Git 跟踪(已提交过)
java·git·intellij-idea
难以触及的高度1 小时前
Dify 本地部署实操全教程:零基础快速搭建私有化 AI 应用
人工智能·ai·github·ai编程·dify
之歆5 小时前
Day05_Git 版本控制完全指南:从入门到精通的专业实践
git
Python私教10 小时前
Git 撤销与回退避坑指南:reset / revert / restore 到底用哪个(2026 实战)
git
流浪00110 小时前
Linux篇(九):一文搞懂 Git:版本控制的原理与实操指南
git
comcoo11 小时前
龙虾 AI OpenClaw Windows 本地部署,5 分钟落地专属私有化 AI 智能体
github·开源软件·龙虾ai·open claw部署
Ws_12 小时前
Git + Gerrit 第九课:cherry-pick 挑选提交
git