우리 조직의 모든 github에있는 모든 개인 저장소의 목록을 얻고 싶습니다. 나는 시도 - 나는 per_page MAX 값이 100 알아낼우리의 모든 비공개 repos의 목록을 얻으십시오
curl -u user:pw -X GET https://api.github.com/orgs/xxx/repos?per_page=100 >> list.txt
, 어떻게 하나 개의 파일에 모든 우리의 repos를받을 수 있나요?
감사
우리 조직의 모든 github에있는 모든 개인 저장소의 목록을 얻고 싶습니다. 나는 시도 - 나는 per_page MAX 값이 100 알아낼우리의 모든 비공개 repos의 목록을 얻으십시오
curl -u user:pw -X GET https://api.github.com/orgs/xxx/repos?per_page=100 >> list.txt
, 어떻게 하나 개의 파일에 모든 우리의 repos를받을 수 있나요?
감사
도달 한 마지막 페이지가 비어있을 때까지 각 페이지를 반복하는 bash 스크립트를 사용할 수 있습니다.
필터는 개인 저장소를 필터링하는 jq
JSON 구문 분석기로 수행 할 수 있으며, 원하는 경우 분기 된 저장소 나 원하는 항목을 제외 할 수도 있습니다. 내가 인증을 위해 personal access token을 사용하고
주 (개인의 repo를 얻을 수) :
#!/bin/bash
# change those vars :
GITHUB_ORG=docker
GITHUB_ACCESS_TOKEN=12345666799897950400303332323
OUTPUT_FILE=repo_list.json
loop=0
index=1
TMP_FILE=tmpfile.txt
PER_PAGE=100
rm -f $TMP_FILE
echo "[]" > $OUTPUT_FILE
while [ "$loop" -ne 1 ]
do
data=`curl -s "https://api.github.com/orgs/$GITHUB_ORG/repos?access_token=$GITHUB_ACCESS_TOKEN&page=$index&per_page=$PER_PAGE"`
check_error=`echo "$data" | jq 'type!="array"'`
if [ "$check_error" == "true" ]; then
echo "access token is invalid"
exit 1
fi
filtered=`echo "$data" | jq '[ .[] | select(.private == true) ]'`
if [ "$filtered" == "[]" ]; 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 repo size of : $size"
index=$((index+1))
fi
done
을 대신 전체 JSON 객체의 저장소 URL의 배열을 가지고 싶다면, 대체 :
를jq '[ .[] | select(.private == true) ]'
과 :
jq '[ .[] | select(.private == true) | .html_url ]'
GitHub의는 매김의 기초뿐만 아니라 방법 write a small script to gather your data에 커버 가이드 Traversing with Pagination라는 자신의 API의 기사가있다.