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

如何自动化筛选GitHub Gist中活跃且改动大的Fork?

这个问题我之前也碰到过!手动翻几百个Fork效率太低了,借助GitHub API加简单的脚本就能自动化筛选,分两种需求给你具体方案:

1. 筛选新增代码行数最多的Fork

思路

要统计每个Fork的新增行数,核心是对比原Gist和Fork的代码差异。我们可以先克隆原Gist,再逐个克隆Fork,用git diff计算新增的非空行数,最后排序输出结果。

具体实现(Bash脚本)

下面是一个可直接运行的脚本,替换GIST_ID为你要分析的Gist ID即可:

#!/bin/bash

# 替换为目标Gist的ID
GIST_ID="2961058"
ORIGINAL_GIST_URL="https://gist.github.com/$GIST_ID.git"

# 创建临时工作目录
TEMP_DIR=$(mktemp -d)
cd "$TEMP_DIR" || exit 1

# 克隆原Gist(静默模式)
git clone "$ORIGINAL_GIST_URL" original > /dev/null 2>&1

# 获取所有Fork的Git地址和网页地址(每页最多100个Fork)
curl -s "https://api.github.com/gists/$GIST_ID/forks?per_page=100" | jq -r '.[] | "\(.git_url) \(.html_url)"' | while read -r GIT_URL HTML_URL; do
    # 克隆当前Fork
    FORK_DIR=$(basename "$GIT_URL" .git)
    git clone "$GIT_URL" "$FORK_DIR" > /dev/null 2>&1

    # 统计新增行数:过滤diff中的新增行,排除文件头行,统计非空行
    ADDED_LINES=$(git diff --no-index original/"$FORK_DIR" | grep "^+" | grep -v "^+++" | wc -l)

    # 输出结果
    echo "Fork地址: $HTML_URL | 新增行数: $ADDED_LINES"

    # 清理当前Fork目录
    rm -rf "$FORK_DIR"
done

# 可选:按新增行数降序排序结果
# echo "Fork地址: $HTML_URL | 新增行数: $ADDED_LINES" >> results.txt
# sort -k4 -nr results.txt

# 清理临时目录
rm -rf "$TEMP_DIR"

注意事项

  • 如果Fork数量超过100,需要处理分页:在API请求中添加&page=2、&page=3等参数循环请求。
  • GitHub API未认证时每小时限制60次请求,若Fork较多,建议添加认证(curl -u 你的用户名:你的Token ...),可提升到每小时5000次请求。
  • 脚本会自动创建临时目录,运行后自动清理,不会污染本地环境。
2. 筛选最近更新的Fork

思路

这个更简单!GitHub API返回的Fork列表自带updated_at字段,直接用jq对这个字段排序即可。

具体实现(命令行一键执行)

直接运行下面的命令,替换Gist ID即可得到按更新时间倒序排列的Fork:

curl -s "https://api.github.com/gists/2961058/forks?per_page=100" | jq 'sort_by(.updated_at) | reverse | .[] | {Fork地址: .html_url, 最后更新时间: .updated_at}'

说明

  • 结果会显示每个Fork的网页地址和最后更新时间,最新更新的排在最前面。
  • 同样,若Fork超过100,需要分页处理,循环请求不同page的API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:42:16