Skip to content

dqroid/gh2cnb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub到CNB镜像工具

这个工具可以将GitHub公开仓库镜像到CNB平台(cnb.cool),支持单个仓库镜像或批量镜像。它不仅可以创建新的镜像仓库,还可以同步现有仓库的最新更改。

功能概述

  1. 自动化镜像同步

    • 克隆GitHub仓库的完整镜像(包括所有分支和标签)
    • 自动创建目标CNB仓库(如果不存在)
    • 支持增量同步和全量镜像
    • 可处理多个仓库的批量同步
  2. 智能仓库管理

    • 自动维护远程仓库配置
    • 处理本地缓存目录的创建/更新
    • 支持自定义组织/命名空间
    • 自动清理临时目录(可选)
  3. 错误处理机制

    • 分阶段推送策略(先尝试--mirror,失败后分步推送)
    • 完善的错误日志记录
    • HTTP API调用异常处理

使用指南

前置要求

  1. Python 3.6+
  2. Git 2.20+
  3. CNB平台有效访问令牌

安装步骤

git clone https://github.com/mirror-gh/gh2cnb.git
cd gh2cnb
pip install -r requirements.txt

配置文件示例(config.ini)

[github]
token = your_github_token  # 可选,私有仓库需要

[cnb]
token = your_cnb_token
group = your_organization  # CNB目标组织/命名空间

[mirror]
# 仓库映射列表(支持单个或批量)
repositories =
    owner/repo1,
    owner/repo2 => target_group/repo2_mirror

使用示例

  1. 镜像单个仓库
# 使用位置参数(推荐方式)
python github_to_cnb.py owner/repo --config config.ini --cleanup

# 或者使用命名参数
python github_to_cnb.py --github-repo owner/repo --config config.ini --cleanup
  1. 批量镜像
# 在config.ini的[mirror]段配置多个仓库
python github_to_cnb.py -c config.ini
  1. 自定义目标仓库
python github_to_cnb.py owner/source-repo -n target_group/target-repo
  1. 增量更新已存在的仓库
# 如果本地目录和CNB仓库都已存在,将只同步最新更改
python github_to_cnb.py owner/repo

工作流程

graph TD
    A[开始] --> B[读取配置]
    B --> C{指定仓库?}
    C -->|是| D[镜像单个仓库]
    C -->|否| E[批量处理配置]
    D --> F[创建/验证CNB仓库]
    E --> F
    F --> G[克隆/更新GitHub仓库]
    G --> H[配置CNB远程]
    H --> I[推送所有引用]
    I --> J{推送成功?}
    J -->|是| K[清理临时目录]
    J -->|否| L[分步推送]
    L --> M[推送分支]
    L --> N[推送标签]
    M --> O[结果验证]
    N --> O
    O --> K
    K --> P[完成]
Loading

注意事项

  1. 权限要求

    • CNB令牌需要具有创建仓库和推送代码的权限
    • 对GitHub仓库至少需要只读访问权限
  2. 网络配置

  3. 最佳实践

    • 生产环境建议使用--cleanup参数避免存储累积
    • 定期运行以保持镜像同步
    • 敏感令牌必须在配置文件中设置,不支持命令行参数传递
    • 日志中会记录所有执行的命令,便于调试
  4. 异常处理

    • 网络中断会自动重试标准Git操作
    • API调用失败会立即终止流程
    • 推送失败时会保留临时目录供调试
  5. 性能特征

    • 首次镜像:使用 git clone --mirror 全量克隆后推送
    • 后续同步:使用 git remote update --prune 增量更新(仅传输差异)
    • 推送策略:优先使用 git push --mirror,失败时尝试 --all--tags
    • 平均处理时间:≈1.5倍原始仓库克隆时间

附:完整参数说明

usage: github_to_cnb.py [-h] [-c CONFIG] [-n CNB_REPO] [--cleanup] [github_repo]

positional arguments:
  github_repo          GitHub仓库 (格式: owner/repo)

options:
  -h, --help           show this help message and exit
  -c CONFIG, --config CONFIG
                       配置文件路径 (默认: config.ini)
  -n CNB_REPO, --cnb-repo CNB_REPO
                       CNB仓库 (格式: owner/repo)
  --cleanup           操作完成后清理克隆的临时目录 (默认: 不清理)

注意事项

  1. 所有操作将在当前目录下的子目录中进行,子目录名称为GitHub仓库名称(将斜杠替换为下划线)。

  2. 如果本地子目录已存在且是有效的git仓库,将只获取最新更改而不重新克隆。

  3. 默认情况下不会清理克隆的临时目录,可以通过 --cleanup 参数启用清理。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages