2016-08-12 2 views
5

리눅스에서 매일 개인 git 저장소에서 특정 파일을 가져 오려고합니다. 다음과 같이 curl 명령을 사용하여 Get content API을 통해 1MB 미만의 파일에는 문제가 없습니다.git에서 특정 파일 (> 1MB)을 자동으로 얻는 방법

curl -H "Content-Type: application/json" -H "Authorization: token $TOKEN" -H 'Accept: application/vnd.github.v3.raw' -O $FILEPATH 

파일 크기가 1MB보다 커지면 지금 어떻게해야할지 모르겠습니다.

힘내 기는 내게 Git Data API을 사용하여 방울 (최대 100MB, 나를 위해 충분한 것)을 얻으라고 알려줍니다.

자주 업데이트되는 파일의 SHA1을 가져 오는 방법을 찾으려고했지만 아직 적용 가능한 방법을 찾지 못했습니다. 어떠한 제안?

아니면 git API를 사용하는 방법 이외의 방법일까요?

미리 감사드립니다.

답변

4

저장소의 파일 경로를 알고있는 경우 Contents API을 사용하여 해당 SHA를받을 수 있습니다. 예를 들어 :

~ λ curl -H "Content-Type: application/json" \ 
    -H "Authorization: token $TOKEN" \ 
    -H "Accept: application/vnd.github.v3" \ 
    https://api.github.com/repos/smt116/dotfiles/contents/README.md 

{ 
    "name": "README.md", 
    "path": "README.md", 
    "sha": "36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63", 
    "size": 16, 
    "url": "https://api.github.com/repos/smt116/dotfiles/contents/README.md?ref=master", 
    "html_url": "https://github.com/smt116/dotfiles/blob/master/README.md", 
    "git_url": "https://api.github.com/repos/smt116/dotfiles/git/blobs/36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63", 
    "download_url": "https://raw.githubusercontent.com/smt116/dotfiles/master/README.md", 
    "type": "file", 
    "content": "IyMgTXkgZG90ZmlsZXMuCg==\n", 
    "encoding": "base64", 
    "_links": { 
    "self": "https://api.github.com/repos/smt116/dotfiles/contents/README.md?ref=master", 
    "git": "https://api.github.com/repos/smt116/dotfiles/git/blobs/36bba4cf1f8fd3cbbdf81d4cc2291b54a4e56a63", 
    "html": "https://github.com/smt116/dotfiles/blob/master/README.md" 
    } 
} 

이제 Git Data API은 JSON 응답에 포함되어 git_url 링크를 사용하여 파일을 다운로드 할 수 있습니다.

그러나 주어진 저장소에서 모든 blob을 다운로드하려면 Git Trees을 사용하여 목록을 먼저 가져올 수 있습니다. 커밋 SHA를 지정해야하지만 가장 최근 커밋이 정상이면 HEAD를 사용할 수 있습니다. 예를 들어 :

~ λ curl -H "Content-Type: application/json" \ 
     -H "Authorization: token $TOKEN" \ 
     -H "Accept: application/vnd.github.v3.raw" \ 
     https://api.github.com/repos/smt116/dotfiles/git/trees/HEAD 

{ 
    "sha": "0fc96d75ff4182913cec229978bb10ad338012fd", 
    "url": "https://api.github.com/repos/smt116/dotfiles/git/trees/0fc96d75ff4182913cec229978bb10ad338012fd", 
    "tree": [ 
    { 
     "path": ".agignore", 
     "mode": "100644", 
     "type": "blob", 
     "sha": "e2ca571728887bce8255ab3f66061dde53ffae4f", 
     "size": 21, 
     "url": "https://api.github.com/repos/smt116/dotfiles/git/blobs/e2ca571728887bce8255ab3f66061dde53ffae4f" 
    }, 
    { 
     "path": ".bundle", 
     "mode": "040000", 
     "type": "tree", 
     "sha": "4148d567286de6aa47047672b1f2f73d7bea349b", 
     "url": "https://api.github.com/repos/smt116/dotfiles/git/trees/4148d567286de6aa47047672b1f2f73d7bea349b" 
    }, 
    ... 

이 서브 디렉토리를 포함하여 모든 파일의 세부 사항을 얻으려면, 당신은 URL에 recursive=1 쿼리 매개 변수를 추가해야합니다.

JSON 응답을 구문 분석하고 blob 유형의 항목을 필터링하고 url 속성을 사용하여 파일을 다운로드해야합니다.

+0

'~ λ' 란 무엇입니까? 쉘 프롬프트? –

+0

예, 쉘 프롬프트입니다. – smefju

+0

쉘 프롬프트를 표시 할 때는'>','$'또는'$>'와 같은 정규 표준으로 대체하는 것을 고려하십시오. 그래서 더 널리 인식 될 것입니다. –

관련 문제