В общих чертах, я хотел бы получить прямое преобразование tar-to-tar, в котором корень результата содержит только определенное поддерево каталога оригинала.
Чтобы проиллюстрировать это на примере, скажем, я хочу только каталог gitweb из репозитория 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/...
В руководстве предусмотрены дополнительные специфичные для бэкенда опции, но попытка передать --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
Да, я могу извлечь вывод git-archive с помощью --strip-components
и создать новый архив результата, но я пытаюсь избежать использования файловой системы в качестве временной переменной.