В широком смысле, то, что мне нужно, это прямое преобразование tar-to-tar, где корень результата содержит только конкретное поддерево каталога.Как получить эффект от - strip-компонентов GNU tar с git-архивом?
Чтобы проиллюстрировать пример, скажем, я хочу только gitweb directory из репозитория git. Запуск
$ git archive --prefix=git-gitweb/ master gitweb | tar tf -
дает
git-gitweb/ git-gitweb/gitweb/ git-gitweb/gitweb/INSTALL git-gitweb/gitweb/Makefile git-gitweb/gitweb/README git-gitweb/gitweb/gitweb.perl git-gitweb/gitweb/static/ git-gitweb/gitweb/static/git-favicon.png git-gitweb/gitweb/static/git-logo.png git-gitweb/gitweb/static/gitweb.css git-gitweb/gitweb/static/gitweb.js
, но я хочу
git-gitweb/ git-gitweb/INSTALL git-gitweb/Makefile git-gitweb/...
manual предусматривает дополнительные опции серверных специфичным, но попытка передать --strip-components
выдает ошибку:
$ git archive --prefix=git-gitweb/ --strip-components=1 master gitweb | \ tar tf - error: unknown option `strip-components=1' usage: git archive [options] [...] ...
Бэкэнда tar не является GNU tar в любом случае.
Кто-то в #gnu канале FreeNode предложил Tardy, но он не понимает выход git-archive:
$ git archive master > old.tar $ tardy old.tar new.tar tardy: old.tar: file type ``g'' unknown
Да, я мог бы извлечь вывод ГИТ-архив с --strip-components
и создать новый архив результат, но я пытаюсь избежать использования файловой системы в качестве временной переменной.
Великими, и работает с параметром '--remote' для git-архива тоже! –