Git
English ▾ 主题 ▾ 最新版本 ▾ git-archive 最后更新于 2.46.0

名称

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

描述

创建指定格式的存档,其中包含命名树的树结构,并将其写入标准输出。如果指定了 <prefix>,则会将其附加到存档中的文件名之前。

git archive 在给出树 ID 与给出提交 ID 或标签 ID 时表现不同。提供树 ID 时,当前时间将用作存档中每个文件的修改时间。另一方面,提供提交 ID 或标签 ID 时,将使用提交对象中记录的提交时间。此外,如果使用 tar 格式,则提交 ID 将存储在全局扩展 pax 头中;可以使用 git get-tar-commit-id 提取它。在 ZIP 文件中,它被存储为文件注释。

选项

--format=<fmt>

结果存档的格式。可能的值为 tarziptar.gztgz 以及使用配置选项 tar.<format>.command 定义的任何格式。如果没有给出 --format,并且指定了输出文件,则将尽可能从文件名推断出格式(例如,写入 foo.zip 将使输出为 zip 格式)。否则,输出格式为 tar

-l
--list

显示所有可用格式。

-v
--verbose

向 stderr 报告进度。

--prefix=<prefix>/

在存档中的路径之前附加 <prefix>/。可以重复使用;其最右侧的值将用于所有跟踪文件。请参阅以下内容,了解 --add-file 使用哪个值。

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

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

--add-file=<file>

将未跟踪文件添加到存档中。可以重复使用以添加多个文件。存档中文件的路径是通过在该 --add-file 之前连接最后一个 --prefix 选项(如果有)的值和 <file> 的基本名称构建的。

--add-virtual-file=<path>:<content>

将指定的内容添加到存档中。可以重复使用以添加多个文件。

<path> 参数可以以文字双引号字符开头和结尾;包含的文件名被解释为 C 样式字符串,即反斜杠被解释为转义字符。如果路径包含冒号,则路径必须用引号括起来,以防止冒号被误解为路径和内容之间的分隔符,或者如果路径以双引号字符开头或结尾。

文件模式仅限于普通文件,并且该选项可能受平台相关的命令行限制。对于非平凡情况,请写入未跟踪文件并使用 --add-file 代替。

请注意,与 --add-file 不同,存档中创建的路径不受 --prefix 选项的影响,因为可以将完整 <path> 指定为该选项的值。

--worktree-attributes

还在工作树中的 .gitattributes 文件中查找属性(请参阅 属性)。

--mtime=<time>

设置存档条目修改时间。如果没有此选项,如果 <tree-ish> 是提交或标签,则使用提交者时间,如果是树,则使用当前时间。

<extra>

这可以是归档程序后端理解的任何选项。请参阅下一节。

--remote=<repo>

不是从本地仓库创建 tar 存档,而是从远程仓库检索 tar 存档。请注意,远程仓库可能会对 <tree-ish> 中允许使用的 sha1 表达式施加限制。有关详细信息,请参阅 git-upload-archive[1]

--exec=<git-upload-archive>

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

<tree-ish>

要为其生成存档的树或提交。

<path>

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

后端额外选项

zip

-<digit>

指定压缩级别。较大的值允许命令花费更多时间来压缩以获得更小的尺寸。支持的值从 -0(仅存储)到 -9(最佳比率)。如果没有给出,则默认为 -6

tar

-<number>

指定压缩级别。该值将传递给 tar.<format>.command 中配置的压缩命令。请参阅配置命令的手册页,了解支持的级别列表以及未指定此选项时的默认级别。

配置

tar.umask

此变量可用于限制 tar 存档条目权限位。默认值为 0002,它关闭了世界写入位。特殊值“user”表示将使用归档用户的 umask 代替。有关详细信息,请参阅 umask(2)。如果使用 --remote,则只有远程仓库的配置生效。

tar.<format>.command

此变量指定一个 shell 命令,git archive 生成的 tar 输出应该通过该命令进行管道传输。该命令使用具有生成的 tar 文件的 shell 执行,并将最终输出生成到其标准输出。任何压缩级别选项都将传递给该命令(例如,-9)。

tar.gztgz 格式是自动定义的,默认情况下使用魔术命令 git archive gzip,它调用 gzip 的内部实现。

tar.<format>.remote

如果为 true,则启用该格式以通过 git-upload-archive[1] 供远程客户端使用。对于用户定义的格式,默认为 false,但对于 tar.gztgz 格式,则为 true。

属性

export-ignore

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

export-subst

如果为文件设置了 export-subst 属性,则 Git 在将此文件添加到存档时将扩展几个占位符。有关详细信息,请参阅 gitattributes[5]

请注意,属性默认情况下取自正在存档的树中的 .gitattributes 文件。如果您想在事后调整输出的生成方式(例如,您提交了代码但没有在 .gitattributes 中添加相应的 export-ignore),请根据需要调整已检出的 .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 版本创建一个压缩的 tar 包。

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 版本创建一个压缩的 tar 包,但没有全局扩展 pax 头。

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

将当前头部 Documentation/ 目录中的所有内容放入 git-1.4.0-docs.zip 中,并添加 git-docs/ 前缀。

git archive -o latest.zip HEAD

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

git archive -o latest.tar --prefix=build/ --add-file=configure --prefix= HEAD

创建一个 tar 存档,其中包含当前分支上最新提交的内容,没有前缀,并且包含没有前缀的未跟踪文件 configure,以及具有 build/ 前缀的未跟踪文件 configure

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

配置用于创建 LZMA 压缩的 tar 文件的“tar.xz”格式。您可以使用 --format=tar.xz 指定它,也可以通过创建像 -o foo.tar.xz 这样的输出文件来指定它。

另请参阅

GIT

git[1] 套件的一部分

scroll-to-top