2011-02-02 2 views
3

В широком смысле, то, что мне нужно, это прямое преобразование 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 и создать новый архив результат, но я пытаюсь избежать использования файловой системы в качестве временной переменной.

ответ

7

Архив этого каталог как УХО, и вы не будете иметь дополнительный компонент пути:

(cd gitweb; git archive --prefix=git-gitweb/ master .) | tar tf - 

Или использовать этот синтаксис, предложенный на странице git-archive людей:

git archive --prefix=git-gitweb/ master:gitweb | tar tf - 
+0

Великими, и работает с параметром '--remote' для git-архива тоже! –