Git 同时管理两个仓库:提交与同步全指南
在多场景开发中,有时需要将代码同时维护在两个远程仓库(例如 GitHub 与 Gitee、公司内部仓库与外部备份仓库等)。本文将详细介绍如何实现代码同时提交到两个仓库,以及当其中一个仓库被其他开发者更新后,如何同步到另一个仓库的完整流程。
一、同时提交代码到两个远程仓库
通过配置 Git 多远程仓库地址,可实现一次提交(或分步提交)到两个仓库,具体步骤如下:
1. 查看当前远程仓库配置
首先确认本地仓库已关联的远程仓库,执行命令:
git remote -v
输出结果类似:
origin https://github.com/yourusername/repo1.git (fetch) origin https://github.com/yourusername/repo1.git (push)
其中 origin 是默认远程仓库的别名。
2. 添加第二个远程仓库
使用 git remote add 命令添加第二个仓库,自定义一个别名(例如 second):
git remote add second https://gitee.com/yourusername/repo2.git
再次执行 git remote -v,若能看到 second 的地址,则添加成功。
3. 提交代码到本地仓库
按正常流程将修改提交到本地仓库:
git add . # 添加所有修改文件 git commit -m "feat: 新增XX功能" # 提交到本地仓库
4. 推送到两个远程仓库
可通过两种方式推送:
分步推送:分别指定仓库别名推送(清晰可控)
git push origin main # 推送到第一个仓库(origin)的main分支 git push second main # 推送到第二个仓库(second)的main分支
合并推送:将第二个仓库地址添加到默认别名下,实现一次推送
# 将second仓库地址添加到origin的推送地址中 git remote set-url --add origin https://gitee.com/yourusername/repo2.git # 之后只需执行一次推送,即可同步到两个仓库 git push origin main
git remote set-url --delete origin 仓库地址。二、当一个仓库被更新后,同步到另一个仓库
若其他开发者更新了其中一个远程仓库(例如 origin),需手动同步到另一个仓库(例如 second),步骤如下:
1. 从已更新的仓库拉取最新代码
先拉取有更新的仓库代码到本地,确保本地代码为最新:
git pull origin main # 从origin仓库拉取main分支最新代码
若拉取时出现冲突,需先解决冲突(修改冲突文件 → git add 冲突文件 → git commit -m "解决同步冲突")。
2. 推送到另一个仓库
本地代码更新后,推送到需要同步的仓库:
git push second main # 将拉取的更新推送到second仓库
三、自动化同步脚本(Linux/Windows)
为避免重复手动操作,可通过脚本实现一键同步。以下是适用于 Linux 和 Windows 的脚本:
1. Linux/Mac 系统(sync.sh)
#!/bin/bash echo "===== 开始同步仓库 =====" # 拉取origin仓库的最新代码 echo "→ 从origin拉取最新代码..." git pull origin main if [ $? -ne 0 ]; then echo "❌ 从origin拉取失败,请检查网络或仓库权限" exit 1 fi # 推送到second仓库 echo "→ 推送到second仓库..." git push second main if [ $? -ne 0 ]; then echo "❌ 推送到second失败,请检查网络或仓库权限" exit 1 fi echo "===== 所有仓库同步完成 ✅ ====="
使用方法:
将代码保存为
sync.sh,放在项目根目录;执行
chmod +x sync.sh赋予执行权限;需要同步时运行
./sync.sh即可。
2. Windows 系统(sync.bat)
@echo off echo ===== 开始同步仓库 ===== :: 拉取origin仓库的最新代码 echo → 从origin拉取最新代码... git pull origin main if %errorlevel% neq 0 ( echo ❌ 从origin拉取失败,请检查网络或仓库权限 pause exit /b %errorlevel% ) :: 推送到second仓库 echo → 推送到second仓库... git push second main if %errorlevel% neq 0 ( echo ❌ 推送到second失败,请检查网络或仓库权限 pause exit /b %errorlevel% ) echo ===== 所有仓库同步完成 ✅ ===== pause
使用方法:
将代码保存为
sync.bat,放在项目根目录;双击
sync.bat即可运行,过程中会显示执行状态,失败时暂停等待查看。
origin、second 和 main 需根据实际仓库别名和分支名修改(例如分支可能是 master)。四、总结
通过配置多远程仓库和使用自动化脚本,可高效实现 Git 代码在两个仓库间的同步管理:
提交阶段:通过
git remote add配置多仓库,按需分步或合并推送;同步阶段:拉取更新仓库代码后推送到另一仓库,或通过脚本一键完成;
冲突处理:同步时若出现冲突,优先在本地解决后再推送,确保两个仓库状态一致。


