如何自动化筛选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
相关产品推荐
相关产品推荐

