我是GitHub API的新手,我一直在寻找一种自动方式,我可以将GitHub中特定存储库的所有提交作为“本地文件”下载到我的机器中,但没有成功。
非常感谢任何建议和意见。
答案 0 :(得分:2)
你可以:
?path=a/file/path
参数过滤所述提交,只获取给定file.cpp
答案 1 :(得分:1)
如果你想通过Github API在一个repo上list the commits,你可以使用以下bash脚本迭代所有提交并将它们写入根JSON数组中的单个文件。
如果您想要选择特定字段或过滤其他内容,则可以添加自己的jq
过滤器:
#!/bin/bash
# change those vars :
GITHUB_USER=google
GITHUB_REPO=gson
OUTPUT_FILE=commit_list.json
GITHUB_ACCESS_TOKEN=1234567890123445678
loop=0
index=1
TMP_FILE=tmpfile.txt
PER_PAGE=100
rm -f $TMP_FILE
echo "[]" > $OUTPUT_FILE
while [ "$loop" -ne 1 ]
do
URI="https://api.github.com/repos/$GITHUB_USER/$GITHUB_REPO/commits?page=$index&per_page=$PER_PAGE&access_token=$GITHUB_ACCESS_TOKEN"
data=`curl -s $URI`
# add some filter here if needed (for instance `echo "$data" | jq '[ .[].commit ]`)
filtered=`echo "$data"`
check=`echo "$filtered" | jq 'if (type=="array" and length>0) then "continue" else "stop" end'`
if [ "$check" == '"stop"' ]; then
loop=1
else
echo "$filtered" > $TMP_FILE
concat=`jq -s add $TMP_FILE $OUTPUT_FILE`
echo "$concat" > $OUTPUT_FILE
size=`jq '. | length' $OUTPUT_FILE`
echo "computed $index page - fetched total commit count of : $size"
index=$((index+1))
fi
done
输出位于输出文件commit_list.json
中,该文件是所有commit JSON object的数组:
# jq 'length' commit_list.json
1329