2015-12-24 5 views
1

Я хочу знать, как получить все коммиты/версии файла (т. Е. Содержимое коммитов/версий) с помощью API GitHub.
Я решил один из способов сделать это, что эквивалентно ответе this other question.Получение всех версий файла с помощью GitHub blob api

Проблема заключается в следующем использует «содержимое» API, который имеет верхний предел 1 МБ на файл (вы получите это сообщение об ошибке при попытке открыть файл размером более 1 МБ: «This API returns blobs up to 1 MB in size. The requested blob is too large to fetch via the API, but you can use the Git Data API to request blobs up to 100 MB in size.»)

Чтобы получить файлы размером более 1 МБ (до 100 МБ), вам нужно использовать API-интерфейс «blob», но я не знаю, как его использовать так же, как API содержимого.

I.e., учитывая конкретную фиксацию файла, как вы получаете содержимое этого файла с помощью API-интерфейса «blob»?

ответ

2

get content API действительно позволяет передавать SHA1:

Blob API также использует SHA1:

GET /repos/:owner/:repo/git/blobs/:sha 

Но вы должны получить SHA1 файла, который вы хотите первым.

См. «How do I get the “sha” parameter from GitHub API without downloading the whole file?», используя Get Tree API для родительской папки.

GET /repos/<owner>/<repo>/git/trees/url_encode(<branch_name>:<parent_path>) 

«url_encode(<branch_name>:<parent_path>)» означает, что <branch_name>:<parent_path> должен быть url encoded

Результат из дерева даст вам SHA1 файла, который вы ищете.

OP buddyroo30 упоминает in the comments:

Я закончил тем, что делал так же с использованием дерева API.
В частности, я получаю все коммиты для файла. Затем я пытаюсь использовать API содержимого для получения содержимого файла для каждой фиксации.
Если это не удается (то есть более 1 МБ, поэтому мне нужно использовать API-интерфейс blob), я получаю URL-адрес дерева для файла из его фиксации (т. Е. В Perl: $commit_tree_url = $commit_info->{'commit'}->{'tree'}->{'url'}).
затем я получаю $commit_tree_url и найти нужную древовидную запись в результатах для файла --- у этого будет хеш-значение 'url', которое можно использовать для получения содержимого файла через API-интерфейс blob.

+0

Спасибо, я закончил так же, используя API дерева. В частности, я получаю все коммиты для файла. Затем я пытаюсь использовать API содержимого для получения содержимого файла для каждой фиксации. Если это не удается (т.е. размером более 1 МБ, поэтому мне нужно использовать API-интерфейс blob), я получаю URL-адрес дерева для файла из его фиксации (т. Е. В Perl: $ commit_tree_url = $ commit_info -> {'commit'} -> { 'дерево'} -> { 'URL'}). то я получаю $ commit_tree_url и нахожу правильную запись дерева в результатах для файла --- у этого будет хеш-значение 'url', которое можно использовать для получения содержимого файла через API-интерфейс blob. – buddyroo30

+0

@ buddyroo30 Отлично! Я включил ваш комментарий в ответ для большей наглядности. – VonC

Смежные вопросы