2016-12-09 3 views
1

Мне нужно получить доступ к удаленному репозиторию Git, чтобы получить историю фиксации (и только это) с помощью приложения Java. JGit, я вижу, вариант. Из документации я узнал, что вы должны клонировать репозиторий для доступа к нему.Git API для доступа к удаленному репозиторию без клонирования

Есть ли способ получить доступ к репозиторию удаленно (т. Е. Без клонирования), с JGit или другим API?

Поскольку мне интересно получать только историю фиксации, я не вижу смысла клонировать репозиторий и получать обновления каждый раз, когда мне нужно увидеть последнюю историю фиксации.

Любые указатели оцениваются.

+0

Вероятно, глядя на что-то на https://developer.github.com/v3/ – nullpointer

+0

commit history * - это * репозиторий.Вы имеете в виду только сообщения журнала фиксации, даты и время, такие как вывод 'git log'? Вам, вероятно, лучше всего клонировать репозиторий, он будет быстрее, чем пытаться получить его через веб-API, и вам не нужно управлять обновлениями. – Schwern

+0

Я думаю, что git ls-remote - одна из немногих команд, в которых вам не нужно клонировать, но она не приносит вам коммитов – pedrorijo91

ответ

1

Вы можете сделать это, используя Github API, но гораздо быстрее и проще просто клонировать хранилище.

В частности, вы бы использовали get all references и фильтр для филиалов (refs/heads/...). Затем get the latest commit on each branch, а затем заберите его родителей и родителей родителей и т. Д., Пока не дойдете до корня репозитория.

Помните, что у фиксации может быть несколько родителей, поэтому вы не можете просто сохранить фиксации линейно, вам нужно построить график.

И получение каждой фиксации является отдельным веб-запросом.

И вы - rate limited to 5000 requests per hour.

Чтобы получать обновления, повторите процесс, пока не достигнете фиксации, которую вы видели раньше. Это означает, что вам нужно будет хранить информацию о ком-то где-нибудь, по крайней мере, фиксации, которые вы видели. Недостаточно хранить только идентификаторы заголовков филиалов, потому что они могут изменить их.


Или вы можете сделать голый клон, git clone --bare, чтобы получить хранилище без проверки, что позволит сэкономить хороший кусок дискового пространства (но не сети). Затем используйте обычные процедуры Git для изучения истории.

Формат репозитория Git чрезвычайно эффективен, часто полная история не превышает размер текущей проверки. Его сетевые протоколы также очень эффективны. И он знает, как обновить себя только git fetch origin.


Или, если вы просто хотите быстрый взгляд на глаз, используйте вкладку Commits на Github странице проекта. For example.

+0

Спасибо, Шерн, за публикацию этого. Java-реализация API Github кажется простым способом сделать это. – Sahana

0

Как указал Schwern, история совершения операции является репозиторием.

Разумный способ вести историю репозитория git - сначала клонировать его. Если вас интересует только история, вы можете опустить кассу или создать голой клон. В JGit, используйте CloneCommand так:

Git git = Git.cloneRepository() 
    .setURI("https://example.org/repo.git") 
    .setDirectory("/path/to/local/copy") 
    .setNoCheckout(true) // or .setBare(true) 
    .call(); 

Смотрите эту статью для получения более подробной информации о CloneCommand JGit в: http://www.codeaffine.com/2015/11/30/jgit-clone-repository/

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