2017-02-21 92 views
1

我是GitHub API的新手,我一直在寻找一种自动化的方式,我可以将GitHub中特定存储库的所有提交作为“本地文件”下载到我的机器中,但没有成功。GitHub API,提交为本地文件

任何意见和建议将不胜感激。

+0

你是什么意思“本地文件”?另外,你希望用什么语言来做到这一点? – peinearydevelopment

+0

我的意思是“本地文件”,例如将我的机器中的提交存储为“file.cpp”。我正在使用shell脚本来做这件事。 – Hex

+0

如果您克隆了回购,那么该流程的一部分会将所有提交归入“本地文件”。 api返回JSON对象。仍然不知道你正在尝试做什么,为什么,或者你正在尝试用什么语言来实现这个目标。 – peinearydevelopment

回答

2

您可以:

  • 简单的git克隆GitHub库:您将收到的文件签出由默认分支,并在git的子文件夹中的所有提交
  • 或者get the archive link of a repo然后卷曲说存档(但你将只能得到回购协议的内容,而不是“全部提交”
  • 或者list the commits on a repo,使用?path=a/file/path参数滤波所述提交和只得到了一个给定的file.cpp
0的那些
+0

我看到所有的提交都是通过克隆回购。似乎使用?path = a/file/path检索提交的url而不是原始文件。我可以在.git目录中使用diff工具,但不知道是否可以将整个提交的文件存储为原始文件。 – Hex

+0

@Hex true,'?path =/a/file/path'会列出一个提交中的文件,但是它包含了'raw_url'字段。 – VonC

+0

太好了,非常感谢。 – Hex

1

如果您想通过Github API在012o上进行回购,您可以使用以下bash脚本迭代所有提交并将它们写入根JSON数组中的单个文件。

您可以添加自己的jq的过滤器,如果你想选择特定字段或过滤别的:

#!/bin/bash 

# change those vars : 
GITHUB_USER=google 
GITHUB_REPO=gson 
OUTPUT_FILE=commit_list.json 
GITHUB_ACCESS_TOKEN=123456789

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 

此脚本需要jqcurl

输出位于输出文件commit_list.json这是一个数组全部commit JSON object

# jq 'length' commit_list.json 
1329