Получить один файл из удаленного репозитория git - PullRequest
5 голосов
/ 04 сентября 2010

Есть ли способ программной загрузки одного файла из удаленного репозитория git в Java?

  1. Я предпочитаю решение, которое использует как можно меньшую полосу пропускания, желательно только загрузку этого единственного файла. Мне не нужно просматривать хранилище, у меня уже есть путь к файлу.
  2. Я предпочитаю решение, которое не зависит от других приложений (например, установка другого git-клиента на машине). Библиотека Java, которая содержит саму реализацию git-клиента, была бы оптимальной.

Я смог сделать что-то подобное с Subversion, используя SVNKit , и я видел, что есть чистая Java-реализация git ( eclipse's JGit ), которая может что-то делать похоже, так что я надеюсь, что есть положительный ответ; хотя из того, что я понимаю о том, как работает git - разрешать обновления только из локальных репозиториев - это может оказаться проблематичным.

Ответы [ 3 ]

9 голосов
/ 04 сентября 2010

git на самом деле не предназначен для доступа к одному файлу из удаленного репозитория, но вы можете использовать git archive для этого. Недостатком является то, что вы должны загружать «дерево», а не просто нужный вам блоб.

Е.Г.

git archive --remote=url://to.git.repo branch path/to/dir | tar -x file

В качестве альтернативы, если у вас настроен gitweb в удаленном репозитории, вы можете использовать простую команду curl или wget для загрузки любого файла в его «сыром» формате.

3 голосов
/ 04 сентября 2010

Какой у вас доступ к удаленному хранилищу?Это через SSH, вы можете вызывать команды?Если это так, вы можете просто вызвать git show HEAD:<i>$path_to_file</i>.

Если вы не можете вызывать команды на этом компьютере, это все еще вполне возможно сделать, но вы должны понимать формат репозитория Git.(Это гораздо менее страшно, чем кажется, поскольку он очень прост по конструкции. В отличие от, например, Subversion, формат хранилища не предназначен для использования в качестве черного ящика.)

0 голосов
/ 04 сентября 2010

Quoth git-clone (1) :

- глубина глубины

Создание мелкого клона с историей, усеченной до указанного количества ревизий,У мелкого репозитория есть ряд ограничений (вы не можете клонировать или извлекать из него, ни выдвигать из него, ни в него), но этого достаточно, если вас интересует только недавняя история большого проекта с длинной историей, и вы хотитеотправлять исправления в виде исправлений.

Таким образом, гранулярность - это каталог, но вы можете ограничить историю изменений.

...