| 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 as opposed to a | |
| commit ID or tag ID. When a tree ID is provided, the current time is | |
| used as the modification time of each file in the archive. On the | |
| other hand, when a commit ID or tag ID is provided, 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. Possible values are `tar`, | |
| `zip`, `tar.gz`, `tgz`, and any format defined using the | |
| configuration option `tar.<format>.command`. If `--format` | |
| 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 paths in the archive. Can be repeated; its | |
| rightmost value is used for all tracked files. See below which | |
| value gets used by `--add-file`. | |
| + | |
| The <prefix> is used as given and is not normalized. It may | |
| include leading slashes or parent directory components (e.g., | |
| `../`). Some archive consumers may treat such paths as | |
| potentially unsafe and adjust or warn during extraction. | |
| -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 of the last `--prefix` option (if any) | |
| before this `--add-file` and the basename of <file>. | |
| --add-virtual-file=<path>:<content>:: | |
| Add the specified contents to the archive. Can be repeated to add | |
| multiple files. | |
| + | |
| The `<path>` argument can start and end with a literal double-quote | |
| character; the contained file name is interpreted as a C-style string, | |
| i.e. the backslash is interpreted as escape character. The path must | |
| be quoted if it contains a colon, to avoid the colon from being | |
| misinterpreted as the separator between the path and the contents, or | |
| if the path begins or ends with a double-quote character. | |
| + | |
| The file mode is limited to a regular file, and the option may be | |
| subject to platform-dependent command-line limits. For non-trivial | |
| cases, write an untracked file and use `--add-file` instead. | |
| + | |
| Note that unlike `--add-file` the path created in the archive is not | |
| affected by the `--prefix` option, as a full `<path>` can be given as | |
| the value of the option. | |
| --worktree-attributes:: | |
| Look for attributes in .gitattributes files in the working tree | |
| as well (see <<ATTRIBUTES>>). | |
| --mtime=<time>:: | |
| Set modification time of archive entries. Without this option | |
| the committer time is used if `<tree-ish>` is a commit or tag, | |
| and the current time if it is a tree. | |
| <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`). | |
| + | |
| The `tar.gz` and `tgz` formats are defined automatically and use the | |
| magic command `git archive gzip` by default, which invokes an internal | |
| implementation of gzip. | |
| tar.<format>.remote:: | |
| If true, enable the 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 archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD`:: | |
| Creates a tar archive that contains the contents of the latest | |
| commit on the current branch with no prefix and the untracked | |
| file 'configure' with the prefix 'build/'. | |
| `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 |