git-archive(1)
==============

NAME
----
git-archive - Create an archive of files from a named tree


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

DESCRIPTION
-----------
Creates an archive of the specified format containing the tree
structure for the named tree, and writes it out to the standard
output.  If <prefix> is specified it is
prepended to the filenames in the archive.

'git archive' behaves differently when given a tree ID versus when
given a commit ID or tag ID.  In the first case the current time is
used as the modification time of each file in the archive.  In the latter
case the commit time as recorded in the referenced commit object is
used instead.  Additionally the commit ID is stored in a global
extended pax header if the tar format is used; it can be extracted
using 'git get-tar-commit-id'. In ZIP files it is stored as a file
comment.

OPTIONS
-------

--format=<fmt>::
	Format of the resulting archive: 'tar' or 'zip'. If this option
	is not given, and the output file is specified, the format is
	inferred from the filename if possible (e.g. writing to "foo.zip"
	makes the output to be in the zip format). Otherwise the output
	format is `tar`.

-l::
--list::
	Show all available formats.

-v::
--verbose::
	Report progress to stderr.

--prefix=<prefix>/::
	Prepend <prefix>/ to each filename in the archive.

-o <file>::
--output=<file>::
	Write the archive to <file> instead of stdout.

--add-file=<file>::
	Add a non-tracked file to the archive.  Can be repeated to add
	multiple files.  The path of the file in the archive is built
	by concatenating the value for `--prefix` (if any) and the
	basename of <file>.

--worktree-attributes::
	Look for attributes in .gitattributes files in the working tree
	as well (see <<ATTRIBUTES>>).

<extra>::
	This can be any options that the archiver backend understands.
	See next section.

--remote=<repo>::
	Instead of making a tar archive from the local repository,
	retrieve a tar archive from a remote repository. Note that the
	remote repository may place restrictions on which sha1
	expressions may be allowed in `<tree-ish>`. See
	linkgit:git-upload-archive[1] for details.

--exec=<git-upload-archive>::
	Used with --remote to specify the path to the
	'git-upload-archive' on the remote side.

<tree-ish>::
	The tree or commit to produce an archive for.

<path>::
	Without an optional path parameter, all files and subdirectories
	of the current working directory are included in the archive.
	If one or more paths are specified, only these are included.

BACKEND EXTRA OPTIONS
---------------------

zip
~~~
-<digit>::
	Specify compression level.  Larger values allow the command
	to spend more time to compress to smaller size.  Supported
	values are from `-0` (store-only) to `-9` (best ratio).
	Default is `-6` if not given.

tar
~~~
-<number>::
	Specify compression level. The value will be passed to the
	compression command configured in `tar.<format>.command`. See
	manual page of the configured command for the list of supported
	levels and the default level if this option isn't specified.

CONFIGURATION
-------------

tar.umask::
	This variable can be used to restrict the permission bits of
	tar archive entries.  The default is 0002, which turns off the
	world write bit.  The special value "user" indicates that the
	archiving user's umask will be used instead.  See umask(2) for
	details.  If `--remote` is used then only the configuration of
	the remote repository takes effect.

tar.<format>.command::
	This variable specifies a shell command through which the tar
	output generated by `git archive` should be piped. The command
	is executed using the shell with the generated tar file on its
	standard input, and should produce the final output on its
	standard output. Any compression-level options will be passed
	to the command (e.g., "-9"). An output file with the same
	extension as `<format>` will be use this format if no other
	format is given.
+
The "tar.gz" and "tgz" formats are defined automatically and default to
`gzip -cn`. You may override them with custom commands.

tar.<format>.remote::
	If true, enable `<format>` for use by remote clients via
	linkgit:git-upload-archive[1]. Defaults to false for
	user-defined formats, but true for the "tar.gz" and "tgz"
	formats.

[[ATTRIBUTES]]
ATTRIBUTES
----------

export-ignore::
	Files and directories with the attribute export-ignore won't be
	added to archive files.  See linkgit:gitattributes[5] for details.

export-subst::
	If the attribute export-subst is set for a file then Git will
	expand several placeholders when adding this file to an archive.
	See linkgit:gitattributes[5] for details.

Note that attributes are by default taken from the `.gitattributes` files
in the tree that is being archived.  If you want to tweak the way the
output is generated after the fact (e.g. you committed without adding an
appropriate export-ignore in its `.gitattributes`), adjust the checked out
`.gitattributes` file as necessary and use `--worktree-attributes`
option.  Alternatively you can keep necessary attributes that should apply
while archiving any tree in your `$GIT_DIR/info/attributes` file.

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

	Create a tar archive that contains the contents of the
	latest commit on the current branch, and extract it in the
	`/var/tmp/junk` directory.

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

	Create a compressed tarball for v1.4.0 release.

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

	Same as above, but using the builtin tar.gz handling.

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

	Same as above, but the format is inferred from the output file.

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

	Create a compressed tarball for v1.4.0 release, but without a
	global extended pax header.

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

	Put everything in the current head's Documentation/ directory
	into 'git-1.4.0-docs.zip', with the prefix 'git-docs/'.

`git archive -o latest.zip HEAD`::

	Create a Zip archive that contains the contents of the latest
	commit on the current branch. Note that the output format is
	inferred by the extension of the output file.

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

	Configure a "tar.xz" format for making LZMA-compressed tarfiles.
	You can use it specifying `--format=tar.xz`, or by creating an
	output file like `-o foo.tar.xz`.


SEE ALSO
--------
linkgit:gitattributes[5]

GIT
---
Part of the linkgit:git[1] suite
