You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用GitHub CLI自动拉取新增/更新仓库至本地?含批量拉取方案

一、监听仓库创建/更新事件并自动拉取

GitHub CLI本身没有内置实时监听功能,但可以通过定时轮询+GitHub API实现近似的自动同步:

  1. 核心逻辑

    • 定期调用GitHub API获取目标用户/组织的仓库列表(按更新时间排序)
    • 对比本地仓库的最后同步时间与远程仓库的更新时间
    • 对新仓库执行克隆,对已有更新的仓库执行同步
  2. 具体实现

    • 用gh api获取仓库的关键信息(完整名称、更新时间):
      gh api users/xxxx/repos?per_page=100&sort=updated&direction=desc --jq '.[] | {full_name: .full_name, updated_at: .updated_at}'
      
    • 编写脚本记录每个仓库的最后同步时间,每次轮询时对比远程updated_at字段,判断是否需要执行克隆/同步操作
    • 通过系统定时任务(Linux的cron、macOS的launchd)设置脚本执行周期,比如每小时运行一次
二、拉取最新的100个仓库到本地

要获取按时间排序的最新仓库,只需在API请求中添加排序参数,替代默认的字母排序:

  1. 生成最新仓库列表
    执行以下命令,按更新时间倒序获取最新100个仓库的完整名称,并写入repolist.txt:

    gh api users/xxxx/repos?per_page=100&sort=updated&direction=desc --jq '.[] | .full_name' > repolist.txt
    
    • 若要按创建时间排序,将sort=updated改为sort=created
    • --jq '.[] | .full_name'用于提取仓库的完整标识(如xxxx/repo-name),直接适配你的同步脚本
  2. 优化同步脚本
    原脚本路径切换冗余,可简化为:

    #!/bin/sh
    LOCAL_ROOT="$HOME/xxxx"  # 统一配置本地仓库根目录
    mkdir -p "$LOCAL_ROOT"   # 确保根目录存在
    
    while read -r REPOSRC; do
        REPO_NAME=$(basename "$REPOSRC")
        LOCALREPO="$LOCAL_ROOT/$REPO_NAME"
        LOCALREPO_VC_DIR="$LOCALREPO/.git"
    
        if [ ! -d "$LOCALREPO_VC_DIR" ]; then
            echo "克隆仓库: $REPOSRC"
            gh repo clone "$REPOSRC" "$LOCALREPO"
        else
            echo "同步仓库: $REPOSRC"
            cd "$LOCALREPO" && gh repo sync -s "$REPOSRC"
        fi
    done < repolist.txt
    
    • 统一根目录配置,避免反复切换路径
    • 用read -r兼容含空格的仓库名称
    • 同步时直接进入本地仓库目录,逻辑更清晰

内容的提问来源于stack exchange,提问作者Bsde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:35:16