Spec-Zone.ru › Git

git-archive

Имя

git-archive — создание архива файлов из указанного дерева

Сводка

git archive [--format=<fmt>] [--list] [--prefix=<prefix>/] [<extra>]
              [-o <file> | --output=<file>] [--worktree-attributes]
              [--remote=<repo> [--exec=<git-upload-archive>]] <tree-ish>
              [<path>…​]

Описание

Создаёт архив указанного формата, содержащий структуру дерева для указанного дерева, и записывает его в стандартный вывод. Если указан <prefix>, он добавляется перед именами файлов в архиве.

git archive ведёт себя по-разному в зависимости от того, передан ли ему идентификатор дерева, идентификатор коммита или идентификатор тега. Если указан идентификатор дерева, в качестве времени изменения каждого файла в архиве используется текущее время. Если же указан идентификатор коммита или тега, используется время коммита, записанное в соответствующем объекте коммита. Кроме того, при использовании формата tar идентификатор коммита сохраняется в глобальном расширенном заголовке pax; его можно извлечь с помощью git get-tar-commit-id. В ZIP-файлах он сохраняется как комментарий к файлу.

Параметры

--format=<fmt>

Формат получаемого архива. Возможные значения: tar, zip, tar.gz, tgz, а также любой формат, определённый с помощью параметра конфигурации tar.<format>.command. Если параметр --format не указан, а выходной файл задан, формат по возможности определяется по имени файла (например, запись в foo.zip приводит к тому, что вывод будет в формате zip). В противном случае используется формат вывода tar.

-l
--list

Показать все доступные форматы.

-v
--verbose

Выводить сведения о ходе выполнения в stderr.

--prefix=<prefix>/

Добавить <prefix>/ перед путями в архиве. Параметр можно указывать несколько раз; для всех отслеживаемых файлов используется его последнее значение. Ниже описано, какое значение используется командой --add-file.

Значение <prefix> используется как задано и не нормализуется. Оно может включать начальные косые черты или компоненты родительских каталогов (например, ../). Некоторые программы для работы с архивами могут считать такие пути потенциально небезопасными и изменять их или выдавать предупреждение при распаковке.

-o <file>
--output=<file>

Записать архив в <file> вместо stdout.

--add-file=<file>

Добавить в архив неотслеживаемый файл. Параметр можно указывать несколько раз, чтобы добавить несколько файлов. Путь файла в архиве формируется объединением значения последнего параметра --prefix (если он есть), указанного перед этим параметром --add-file, и базового имени <file>.

--add-virtual-file=<path>:<content>

Добавить указанное содержимое в архив. Параметр можно указывать несколько раз, чтобы добавить несколько файлов.

Аргумент <path> может начинаться и заканчиваться символом двойной кавычки; содержащиеся в нём имя файла интерпретируется как строка в стиле C, то есть обратная косая черта интерпретируется как символ экранирования. Путь необходимо заключить в кавычки, если он содержит двоеточие, чтобы двоеточие не было ошибочно принято за разделитель между путём и содержимым, или если путь начинается либо заканчивается символом двойной кавычки.

Режим файла ограничен обычным файлом; кроме того, на параметр могут распространяться ограничения командной строки, зависящие от платформы. В нетривиальных случаях создайте неотслеживаемый файл и вместо этого используйте --add-file.

Обратите внимание: в отличие от --add-file, путь, создаваемый в архиве, не зависит от параметра --prefix, поскольку в качестве значения параметра можно указать полный путь <path>.

--worktree-attributes

Также искать атрибуты в файлах .gitattributes рабочего дерева (см. раздел АТРИБУТЫ).

--mtime=<time>

Задать время изменения записей архива. Без этого параметра используется время коммиттера, если <tree-ish> является коммитом или тегом, и текущее время, если это дерево.

<extra>

Любые дополнительные параметры, поддерживаемые серверной частью архиватора. См. следующий раздел.

--remote=<repo>

Вместо создания tar-архива из локального репозитория получить tar-архив из удалённого репозитория. Обратите внимание, что удалённый репозиторий может ограничивать допустимые выражения sha1 для <tree-ish>. Подробности см. в git-upload-archive[1].

--exec=<git-upload-archive>

Используется вместе с --remote, чтобы указать путь к git-upload-archive на удалённой стороне.

<tree-ish>

Дерево или коммит, для которого нужно создать архив.

<path>

Если необязательный параметр path не указан, в архив включаются все файлы и подкаталоги текущего рабочего каталога. Если указан один или несколько путей, включаются только они.

Дополнительные параметры серверной части

zip

-<digit>

Указать уровень сжатия. Чем больше значение, тем больше времени команда может потратить на сжатие для уменьшения размера. Поддерживаются значения от -0 (только сохранение без сжатия) до -9 (наилучшее сжатие). Если параметр не указан, по умолчанию используется -6.

tar

-<number>

Указать уровень сжатия. Значение будет передано команде сжатия, настроенной в tar.<format>.command. Список поддерживаемых уровней и уровень по умолчанию, используемый, если этот параметр не указан, см. на странице руководства настроенной команды.

Конфигурация

tar.umask

Эта переменная позволяет ограничить биты прав доступа записей tar-архива. По умолчанию используется 0002, который отключает право записи для всех пользователей. Специальное значение "user" указывает, что вместо него будет использоваться umask пользователя, создающего архив. Подробности см. в umask(2). Если используется --remote, действует только конфигурация удалённого репозитория.

tar.<format>.command

Эта переменная задаёт команду оболочки, через которую следует передавать вывод tar, созданный командой git archive. Команда выполняется оболочкой; сгенерированный файл tar передаётся ей через стандартный ввод, а окончательный результат она должна вывести в стандартный вывод. Команде передаются все параметры уровня сжатия (например, -9).

Форматы tar.gz и tgz определяются автоматически и по умолчанию используют специальную команду git archive gzip, которая вызывает встроенную реализацию gzip.

tar.<format>.remote

Если значение равно true, включает формат для использования удалёнными клиентами через git-upload-archive[1]. Для форматов, определённых пользователем, по умолчанию имеет значение false, а для форматов tar.gz и tgz — true.

Атрибуты

export-ignore

Файлы и каталоги с атрибутом export-ignore не добавляются в архивы. Подробности см. в gitattributes[5].

export-subst

Если для файла установлен атрибут export-subst, Git подставляет значения вместо нескольких заполнителей при добавлении этого файла в архив. Подробности см. в gitattributes[5].

Обратите внимание: по умолчанию атрибуты берутся из файлов .gitattributes в архивируемом дереве. Если после этого нужно изменить способ формирования вывода (например, вы создали коммит, не добавив в его .gitattributes необходимый атрибут export-ignore), при необходимости измените файл .gitattributes в рабочем дереве и используйте параметр --worktree-attributes. Также можно хранить атрибуты, которые должны применяться при архивировании любого дерева, в файле $GIT_DIR/info/attributes.

Примеры

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

Создать tar-архив, содержащий содержимое последнего коммита текущей ветки, и распаковать его в каталог /var/tmp/junk.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

Создать сжатый tar-архив для выпуска v1.4.0.

git archive --format=tar.gz --prefix=git-1.4.0/ v1.4.0 >git-1.4.0.tar.gz

То же, что и выше, но с использованием встроенной обработки tar.gz.

git archive --prefix=git-1.4.0/ -o git-1.4.0.tar.gz v1.4.0

То же, что и выше, но формат определяется по выходному файлу.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0^{tree} | gzip >git-1.4.0.tar.gz

Создать сжатый tar-архив для выпуска v1.4.0, но без глобального расширенного заголовка pax.

git archive --format=zip --prefix=git-docs/ HEAD:Documentation/ > git-1.4.0-docs.zip

Поместить всё содержимое каталога Documentation/ из текущего HEAD в git-1.4.0-docs.zip с префиксом git-docs/.

git archive -o latest.zip HEAD

Создать ZIP-архив, содержащий содержимое последнего коммита текущей ветки. Обратите внимание: формат вывода определяется по расширению выходного файла.

git archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD

Создаёт tar-архив, содержащий содержимое последнего коммита текущей ветки без префикса, а также неотслеживаемый файл configure с префиксом build/.

git config tar.tar.xz.command "xz -c"

Настроить формат "tar.xz" для создания tar-файлов, сжатых с помощью LZMA. Его можно использовать, указав --format=tar.xz, или создав выходной файл, например -o foo.tar.xz.

См. также

gitattributes[5]

archive

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-archive

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API