2017-02-21 1 views
1

저는 GitHub API에 초보자입니다. GitHub의 특정 저장소에 대한 모든 커밋을 내 컴퓨터에 "로컬 파일"로 다운로드 할 수있는 자동화 된 방법을 찾고 있었지만 성공하지 못했습니다 .GitHub API는 로컬 파일로 커밋을 가져옵니다.

모든 조언과 제안을 주시면 감사하겠습니다.

+0

"로컬 파일"이란 무엇입니까? 또한이 언어로 어떤 언어를 사용하고 싶습니까? – peinearydevelopment

+0

필자의 컴퓨터에 커밋을 "file.cpp"로 저장하는 "로컬 파일"을 예로 들었습니다. 쉘 스크립트를 사용하여이 작업을 수행하고 있습니다. – Hex

+0

repo를 복제하면 해당 프로세스의 일부가 모든 커밋을 '로컬 파일'로 가져옵니다. API는 JSON 객체를 반환합니다. 아직도 당신이 무엇을하려고하는지, 왜, 또는 어떤 언어를이 언어에서 성취하려고하는지 확신 할 수 없습니다. – peinearydevelopment

답변

2

다음 중 하나를 수행 할 수 있습니다

  • 단순히 자식 복제하려면 GitHub의의의 repo :이 파일은 기본 분기로 체크 아웃 얻고,
  • 또는 get the archive link of a repo 다음 .git 하위 폴더에있는 모든 커밋됩니다 컬 아카이브 (하지만 당신 만의 repo 컨텐츠를하지 얻을 "모든 커밋"
  • 또는 list the commits on a repo을, 필터는 커밋을 말했다에 ?path=a/file/path 인수를 사용하여 만 주어진 file.cpp
0 사람을 얻을 것이라고 말했다
+0

나는 모든 커밋이 repos를 복제하면서 가져 오는 것을 봅니다. ? path = a/file/path를 사용하면 원시 파일이 아닌 커밋 URL을 검색하는 것으로 보입니다. 나는 .git 디렉토리 내에서 diff 도구를 사용할 수 있지만, 전체 파일을 원시 파일로 저장할 수 있는지는 확실치 않습니다. – Hex

+0

@Hex 사실,'? path =/a/file/path'는 커밋 내 파일을 나열하지만,'raw_url' 필드는 포함합니다. – VonC

+0

대단히 감사합니다. – Hex

1

Github API를 통해 repo에 list the commits을 넣으려면 모든 커밋을 반복하고 루트 JSON 배열의 단일 파일에 쓰는 bash 스크립트를 사용할 수 있습니다.

당신은 당신이 다른 어떤 특정 필드를 선택하거나 필터링하려면 자신의 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 
관련 문제