LINUX.ORG.RU

git - вытащить из remote конкретный коммит.

 


2

5

Сабж.
Я прекрасно понимаю, что можно сделать git clone, git checkout hash. Но проблема в том, что репозиторий жирный и clone занимает достаточно долгое время.

Мне это нужно исключительно для сборки проекта, ни для чего другого. (сейчас git clone -b branch --depth=1, потом сборка). Но это только последний коммит, а мне приспичило любой коммит вытаскивать.

Так, небольшой прогресс, если мой «remote» (bare repository) лежит в файловой системе, то выдрать можно так:

cd /path/to/test.git; GIT_WORK_TREE=/path/to/checkout/test_dir git checkout <hash> -f
(отсюда) http://superuser.com/questions/624259/checkout-git-files-to-a-location-outsid...

★★★★★

Последнее исправление: invy (всего исправлений: 4)

Но проблема в том, что репозиторий жирный и clone занимает достаточно долгое время.

У меня тоже был и есть такой вопрос. Ведь зачем качать сотни мегов или того больше ради крошки!? А если такая функция в скрипте нужна: не заставлять же юзера ждать да ещё и забивать канал и tmp.

gag ★★★★★
()

Присоединяюсь к вопросу.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от anonymous

Это подразумевает наличие склонированного репозитория, не? А мне надо без клона получить файлы соответствующие определённому хэшу.

invy ★★★★★
() автор топика
Ответ на: комментарий от aedeph_

Сам проверял что предложил? после remote add необходимо использовать fetch. fetch не сможет вытянуть только 1 произвольный коммит по sha1, только refspec(бранч или тэг).

dhampire ★★★
()
Ответ на: комментарий от dhampire

Ты прав, не взлетит

Но ты же сам здесь два варианта в этом комментарии и предложил по улучшению ситуации ТСа - тянуть один бранч, а если есть возможность - тянуть по самому раннему тэгу, содержащему коммит.

aedeph_ ★★
()

Большинство вебморд к репе имееют ссылочку для вытягивания архива с искомой ревизией.

bj
()
Ответ на: комментарий от bj

Как они это делают? Просто вариант с GIT_WORK_TREE в принципе работает. Но для этого надо иметь костылик на сервере, что не хотелось бы. Раньше, как я понимаю, работал git archive:

git archive -o <commit.tar> --remote=<url> <hash>
Но похоже в новых версиях с хэшем не работает.

invy ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.