如何用GitHub CLI自动拉取新增/更新仓库至本地?含批量拉取方案
一、监听仓库创建/更新事件并自动拉取
GitHub CLI本身没有内置实时监听功能,但可以通过定时轮询+GitHub API实现近似的自动同步:
核心逻辑
- 定期调用GitHub API获取目标用户/组织的仓库列表(按更新时间排序)
- 对比本地仓库的最后同步时间与远程仓库的更新时间
- 对新仓库执行克隆,对已有更新的仓库执行同步
具体实现
- 用
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请求中添加排序参数,替代默认的字母排序:
生成最新仓库列表
执行以下命令,按更新时间倒序获取最新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),直接适配你的同步脚本
- 若要按创建时间排序,将
优化同步脚本
原脚本路径切换冗余,可简化为:#!/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
相关产品推荐
相关产品推荐

