## 命名

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>…]

## 描述

创建包含指定树的树结构的指定格式的存档，并将其写入标准输出。如果指定了<前缀>，则它将预置为归档文件中的文件名。

`git archive`在给定树ID时，与给定提交ID或标签ID时的行为不同。在第一种情况下，当前时间用作档案中每个文件的修改时间。在后一种情况下，将使用记录在所引用的提交对象中的提交时间。此外，如果使用tar格式，提交ID将存储在全局扩展pax标头中; 它可以使用提取`git get-tar-commit-id`。在ZIP文件中，它被存储为文件注释。

## 选项

--format=<fmt>

结果存档的格式：`tar`或`zip`。如果没有给出这个选项，并且指定了输出文件，那么如果可能的话，从文件名中推断格式（例如，写入“foo.zip”使得输出为zip格式）。否则，输出格式是`tar`。

-l --list

显示所有可用的格式。

-v --verbose

将进展报告给stderr。

--prefix=<prefix>/

在档案中的每个文件名前加上<prefix> /。

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

将存档写入<file>而不是stdout。

--worktree-attributes

在工作树中查找.gitattributes文件中的属性（请参阅ATTRIBUTES）。

<extra>

这可以是存档器后端了解的任何选项。请参阅下一节。

--remote=<repo>

无需从本地存储库创建tar归档文件，可以从远程存储库中检索tar归档文件。请注意，远程存储库可能会限制允许使用哪个sha1表达式`<tree-ish>`。有关详细信息，请参阅git-upload-archive [1]。

--exec=<git-upload-archive>

与--remote一起用于指定`git-upload-archive`远程端的路径。

<tree-ish>

该树或承诺生成一个档案。

<path>

如果没有可选的路径参数，则当前工作目录的所有文件和子目录都将包含在归档中。如果指定了一个或多个路径，则只包含这些路径。

## 后端额外选项

### 压缩

-0

存储文件而不是缩小它们。

-9

最高和最低的压缩级别。您可以指定1到9之间的任何数字来调整压缩速度和比率。

## 组态

tar.umask

这个变量可以用来限制tar归档项的权限位。默认值是0002，这将关闭世界写入位。特殊值“user”表示将使用归档用户的umask。有关详细信息，请参阅umask（2）。如果`--remote`使用，则只有远程存储库的配置才会生效。

tar.<format>.command

该变量指定一个shell命令，通过该命令应该通过其管理生成的tar输出`git archive`。该命令使用带有标准输入上生成的tar文件的shell来执行，并且应该在其标准输出上生成最终输出。任何压缩级别选项都将传递给命令（例如“-9”）。`<format>`如果没有给出其他格式，则具有相同扩展名的输出文件将使用此格式。

“tar.gz”和“tgz”格式是自动定义的，默认为`gzip -cn`。您可以使用自定义命令覆盖它们。

tar.<format>.remote

如果为true，则`<format>`通过git-upload-archive [1]为远程客户端启用。对于用户定义的格式，默认为false，但对于“tar.gz”和“tgz”格式则为true。

## 属性

export-ignore

带有export-ignore属性的文件和目录不会被添加到归档文件中。有关详细信息，请参阅gitattributes [5]。

export-subst

如果将属性export-subst设置为文件，那么在将该文件添加到存档时，Git将展开多个占位符。有关详细信息，请参阅gitattributes [5]。

请注意，属性默认取自`.gitattributes`正在归档的树中的文件。如果你想调整事实后产生输出的方式（例如，你没有在其中添加一个适当的export-ignore，`.gitattributes`就`.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`

为v1.4.0版本创建一个压缩tarball。

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

为v1.4.0发行版创建压缩tarball，但没有全局扩展pax标头。

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

将所有内容放入当前头文件/目录中`git-1.4.0-docs.zip`，并加上前缀`git-docs/`。

`git archive -o latest.zip HEAD`

创建一个Zip存档，其中包含当前分支上最新提交的内容。请注意，输出格式是由输出文件的扩展名推断的。

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

配置一个“tar.xz”格式来制作LZMA压缩的tarfiles。您可以使用它来指定`--format=tar.xz`或创建一个输出文件`-o foo.tar.xz`。