当前位置: 首页 > news >正文

自动从 Gitee 同步到 GitHub

建议将脚本放在独立目录运行,避免与现有仓库冲突。如需同步多个仓库,可复制脚本并修改配置参数。

以下是一个自动从 Gitee 同步到 GitHub 的 Shell 脚本,包含错误处理和配置验证:

#!/bin/bash
set -e # 遇到错误立即终止执行

# ===== 用户配置区 =====
GITEE_REPO="git@gitee.com:yourname/project.git"  # 替换为你的Gitee仓库地址
GITHUB_REPO="git@github.com:yourname/project.git" # 替换为你的GitHub仓库地址
LOCAL_DIR="/path/to/local/repo"  # 本地仓库存储路径
BRANCH="main"                    # 要同步的分支名称
# ======================

# 颜色定义(用于终端输出)
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
NC='\033[0m' # 恢复默认

# 创建本地目录(如果不存在)
mkdir -p "$LOCAL_DIR"

# 进入工作目录
cd "$LOCAL_DIR" || { echo -e "${RED}无法进入目录 $LOCAL_DIR${NC}"; exit 1; }

# 初始化/更新本地仓库
if [ ! -d .git ]; then
    echo -e "${YELLOW}▶ 初始化新仓库...${NC}"
    git init
    git remote add gitee "$GITEE_REPO"
    git remote add github "$GITHUB_REPO"
    git fetch --all
    git checkout -b "$BRANCH" gitee/"$BRANCH"
else
    echo -e "${YELLOW}▶ 检查远程配置...${NC}"
    # 动态更新远程仓库地址
    git remote set-url gitee "$GITEE_REPO" 2>/dev/null || git remote add gitee "$GITEE_REPO"
    git remote set-url github "$GITHUB_REPO" 2>/dev/null || git remote add github "$GITHUB_REPO"
fi

# 同步操作
echo -e "${YELLOW}▶ 从Gitee拉取更新...${NC}"
if ! git pull gitee "$BRANCH"; then
    echo -e "${RED}✗ 拉取Gitee更新失败,请检查网络或仓库权限${NC}"
    exit 1
fi

echo -e "${YELLOW}▶ 推送至GitHub...${NC}"
if git push github "$BRANCH"; then
    echo -e "${GREEN}✓ 同步成功!${NC}"
    echo -e "Gitee → ${GITEE_REPO}\nGitHub → ${GITHUB_REPO}"
else
    echo -e "${RED}✗ 推送GitHub失败,请检查以下可能:\n1. SSH密钥配置\n2. 仓库写入权限\n3. 网络连接${NC}"
    exit 1
fi

# 可选:清理过期分支
git remote prune gitee
git remote prune github

使用说明

  1. 配置准备

    chmod +x sync_repo.sh  # 添加执行权限
    
  2. 首次运行

    ./sync_repo.sh
    
  3. 定时同步(Crontab示例)

    # 每天凌晨3点自动同步
    0 3 * * * /path/to/sync_repo.sh >> /var/log/repo_sync.log 2>&1
    

功能特性

  1. 智能仓库初始化

    • 自动检测 .git 目录存在与否
    • 动态更新远程仓库地址(避免手动修改配置)
  2. 双通道容灾

    • 同时保留 gitee/github 两个远程连接
    • 可通过 git fetch giteegit fetch github 单独操作
  3. 安全机制

    • 严格错误检测(网络故障、权限问题等)
    • 分支保护(不会覆盖未跟踪的本地修改)
  4. 日志友好

    • 彩色终端输出关键操作状态
    • 适合集成到CI/CD流水线

故障排查

  1. SSH连接测试

    ssh -T git@gitee.com  # 应返回欢迎信息
    ssh -T git@github.com # 应返回欢迎信息
    
  2. 手动运行调试

    GIT_TRACE=1 GIT_SSH_COMMAND="ssh -v" ./sync_repo.sh
    
  3. 查看远程配置

    git remote -v
    git branch -vv
    

文章转载自:

http://vJ346FCg.qbfkz.cn
http://NuQe5eh5.qbfkz.cn
http://cjtqlOch.qbfkz.cn
http://wiOAWwjR.qbfkz.cn
http://LdFzLPs9.qbfkz.cn
http://wFTUWTOq.qbfkz.cn
http://TWsimNMh.qbfkz.cn
http://EdUfnTl1.qbfkz.cn
http://ygpx4Uti.qbfkz.cn
http://TFj5CZ29.qbfkz.cn
http://pwzN6UDt.qbfkz.cn
http://caZGgo3Y.qbfkz.cn
http://avbxwtd9.qbfkz.cn
http://jsv8CONA.qbfkz.cn
http://lLaDCd0t.qbfkz.cn
http://fveRuMXL.qbfkz.cn
http://F9olkGOG.qbfkz.cn
http://z6ugfbcZ.qbfkz.cn
http://sEkd89BY.qbfkz.cn
http://3pfObLfo.qbfkz.cn
http://dQ3F6EQ0.qbfkz.cn
http://Meq29USh.qbfkz.cn
http://0DP517Ez.qbfkz.cn
http://BvJG6oXI.qbfkz.cn
http://jFR8fSKO.qbfkz.cn
http://UMrafq7L.qbfkz.cn
http://AEgGGnPs.qbfkz.cn
http://9Vp40Ot2.qbfkz.cn
http://HnU6qPEq.qbfkz.cn
http://AMgFYyAv.qbfkz.cn
http://www.dtcms.com/a/14969.html

相关文章:

  • MATLAB中iscategorical函数用法
  • Docker上安装Zabbix-server-mysql报错
  • 多能互补综合能源系统,改变能源结构---安科瑞 吴雅芳
  • react中如何获取真实的dom
  • 2024-2025年主流的开源向量数据库推荐
  • 从零开始:Django初学者的实战之旅
  • CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)
  • Java网络编程学习(二)
  • 【AQS为什么采用双向链表?】
  • Deepseek 接入Word处理对话框(隐藏密钥)
  • RAG 面试专题笔记
  • Hono.js入门指南_从零开始构建Web应用
  • ubuntu安装VMware报错/dev/vmmon加载失败
  • 使用MaxKB及deepseek搭建本地AI知识库
  • Mac 10.15.3: /var/lib/docker no such file or directory
  • 基于 FFmpeg 和 OpenGLES 的 iOS 视频预览和录制技术方案设计
  • python自动化测试之Pytest框架之YAML详解以及Parametrize数据驱动!
  • tkinter-TinUI-xml实战(12)应用组启动器
  • 团结引擎 Shader Graph:解锁图形创作新高度
  • 无法连接虚拟设备 sata0:1,0因为主机上没有相对应的设备
  • HCIA项目实践---OSPF的知识和原理总结
  • 【STM32】通过HAL库Flash建立FatFS文件系统并配置为USB虚拟U盘MSC
  • MongoDB 基本操作
  • Docker 常用命令基础详解(一)
  • 【16届蓝桥杯寒假刷题营】第1期DAY4
  • CEF132编译指南 MacOS 篇 - 构建 CEF (六)
  • sqli_labs_master Less-8 时间盲注,boolen盲注 获取数据库中的表、列
  • 轻量级TinyXml2的应用
  • 【Pandas】pandas Series drop
  • FFmpeg Video options