Git 同时管理两个仓库:提交与同步全指南

2025-08-18 yvsm 工具与使用

在多场景开发中,有时需要将代码同时维护在两个远程仓库(例如 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 "===== 所有仓库同步完成 ✅ ====="

使用方法:

  1. 将代码保存为 sync.sh,放在项目根目录;

  2. 执行 chmod +x sync.sh 赋予执行权限;

  3. 需要同步时运行 ./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

使用方法:

  1. 将代码保存为 sync.bat,放在项目根目录;

  2. 双击 sync.bat 即可运行,过程中会显示执行状态,失败时暂停等待查看。

脚本中的 origin、second 和 main 需根据实际仓库别名和分支名修改(例如分支可能是 master)。

四、总结

通过配置多远程仓库和使用自动化脚本,可高效实现 Git 代码在两个仓库间的同步管理:

  • 提交阶段:通过 git remote add 配置多仓库,按需分步或合并推送;

  • 同步阶段:拉取更新仓库代码后推送到另一仓库,或通过脚本一键完成;

  • 冲突处理:同步时若出现冲突,优先在本地解决后再推送,确保两个仓库状态一致。