mirror of
https://github.com/git/git.git
synced 2024-12-14 04:18:16 +08:00
69897bc2b8
Commitsee27ca4
and0f544ee
introduced rules by which git-upload-archive would restrict clients from accessing unreachable objects. However, we never documented those rules anywhere, nor their reason for being. Let's do so now. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
198 lines
6.2 KiB
Plaintext
198 lines
6.2 KiB
Plaintext
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.
|
|
|
|
--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
|
|
~~~
|
|
-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
|