2016-08-12 13 views
5

Chcę pobrać pewien plik z prywatnego repozytorium git codziennie pod linux. Nie mam problemu z plikami poniżej 1 MB poprzez Get content API z poleceniem curl w następujący sposób.Jak automatycznie uzyskać określony plik (> 1MB) z git

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

Teraz, gdy plik jest większy niż 1 MB, nie mam pojęcia, jak to zrobić teraz.

Git mówi, żebym użył Git Data API, aby dostać kropelkę (do 100 MB, więcej niż wystarczającą dla mnie).

Chociaż próbowałem znaleźć sposób na pobranie SHA1 z często aktualizowanego pliku, nie znalazłem jeszcze żadnej odpowiedniej metody. Jakieś sugestie?

A może metoda inna niż używanie API git?

Z góry dziękuję.

Odpowiedz

4

Jeśli ścieżka do pliku w repozytorium jest znana, możesz otrzymać jego SHA za pomocą Contents API. Na przykład:

~ λ 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" 
    } 
} 

Teraz można pobrać plik z Git Data API użyciu git_url link, który jest zawarty w odpowiedzi JSON.

Jednak jeśli chcesz pobrać wszystkie obiekty blob z danego repozytorium, możesz najpierw użyć Git Trees, aby pobrać listę. Musisz określić commit SHA, ale możesz użyć HEAD, jeśli ostatnie zatwierdzenie jest w porządku. Na przykład:

~ λ 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" 
    }, 
    ... 

Aby uzyskać szczegółowe informacje o wszystkich plików, w tym podkatalogów, trzeba dodać parametr recursive=1 zapytania do adresu URL.

Następnie należy przeanalizować odpowiedź JSON, przefiltrować te elementy, które mają typ blob i pobrać pliki przy użyciu atrybutów url.

+0

Co to jest "~ λ"? Twoja zachęta do powłoki? –

+0

Tak, to jest moja zachęta do powłoki. – smefju

+0

Po wyświetleniu monitu o powłokę, rozważ zastąpienie go przez bardziej kanoniczny, taki jak '>', '$' lub '$>', aby był on szerzej rozpoznawany jako co to jest. –