git archive

В git есть такая удобная штука, как git-archive. Она (по документации) должна дать возможность выкачать состояние файловой структуры по идентификатору состояния — тег, ветка, хеш-коммита, хеш-дерева состояния, а также уточнить те файлы и директории, которые хотите получить в архиве. Эта команда работает как для локального, так и для remote-репозитория.

Но не на всех серверах возможно выполнения такой процедуры — это выполнение отдельной команды на сервере, а значит чревато проблемами и она (команда) отключена по умолчанию в конфигурации в простом git daemon

А GitHub ругается примерно так:

fatal: remote error:
  Your Git client has made an invalid request:
  003agit-upload-archive /gurugray/xxxxx.git

Но и это ещё не всё — c версии 1.8.0 благодаря коммиту archive: don't let remote clients get unreachable commits взять любое состояние remote-репозитория по хэшу невозможно, только по ссылке — имени ветки, тэгу.

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

В GitHub есть есть подобное через http интерфейс: https://github.yandex./$Repo/archive/$ref.zip _($Repo — путь к репозиторию, $Ref — имя ветки или тэга)_, но указать конкретные папки и файлы уже нельзя — их прийдётся отфильтровывать уже локально.

Если же у вас запущен git instaweb, то это можно сделать так: https://localhost/$Repo?a=snapshot;h=%Ref;sf=tgz _($Repo — путь к репозиторию, $Ref — имя ветки, тэга, или хэш коммита)_ но файлы тоже нельзя выбирать, к сожалению.

Ну а «закрашенную» функциональность вытягивания архива по хэшу коммита я постараюсь исправить в самом git ;).

комментарии Disqus