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 | --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.

--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.

--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
~~~
-0::
	Store the files instead of deflating them.
-9::
	Highest and slowest compression level.  You can specify any
	number from 1 to 9 to adjust compression speed and ratio.


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
