参数细节

  • --format=<fmt>:指定归档文件的格式,可以是 tar 或 zip。如果未指定此选项且指定了输出文件,则根据文件名推断格式;否则,默认为 tar。
  • -l, --list:显示所有可用的格式。
  • -v, --verbose:将进度报告到标准错误。
  • --prefix=<prefix>/:在归档文件中每个文件名前添加 <prefix>/。
  • -o <file>, --output=<file>:将归档写入 <file>,而不是标准输出。
  • --worktree-attributes:在工作树中的 .gitattributes 文件中查找属性。
  • <extra>:这是归档后端可以理解的任何选项。对于 zip 后端,使用 -0 可以存储文件而不压缩它们,而 -1 到 -9 可以用于调整压缩速度和比例。
  • --remote=<repo>:从远程仓库 <repo> 获取 tar 归档文件,而不是从本地仓库获取。
  • --exec=<git-upload-archive>:与 --remote 一起使用,指定远程 <git-upload-archive> 的路径。
  • <tree-ish>:用于生成归档文件的树或提交。
  • <path>:如果没有可选参数,当前工作目录中的所有文件和目录都将包含在归档文件中。如果指定了一个或多个路径,则仅包含这些路径。

34.1 创建 Git 仓库的归档文件

使用 git archive 可以创建仓库的压缩归档文件,例如用于分发发行版。

创建当前 HEAD 版本的 tar 归档文件:

git archive --format tar HEAD | cat > archive-HEAD.tar

创建当前 HEAD 版本的 tar 归档文件,并使用 gzip 压缩:

git archive --format tar HEAD | gzip > archive-HEAD.tar.gz

这也可以通过以下方式完成(这将使用内置的 tar.gz 处理):

git archive --format tar.gz HEAD > archive-HEAD.tar.gz

创建当前 HEAD 版本的 zip 归档文件:

git archive --format zip HEAD > archive-HEAD.zip

也可以仅指定带有有效扩展名的输出文件,格式和压缩类型将从扩展名推断:

git archive --output=archive-HEAD.tar.gz HEAD

34.2 带目录前缀创建 Git 仓库的归档文件

在创建 Git 归档文件时使用前缀是一种良好的实践,这样在解压缩时所有文件都会位于一个目录内。要创建带有目录前缀的 HEAD 归档文件:

git archive --output=archive-HEAD.zip --prefix=src-directory-name HEAD

解压缩后,所有文件都会在当前目录中名为 src-directory-name 的目录内。

34.3 基于特定分支、修订版本、标签或目录创建 Git 仓库的归档文件

也可以创建除 HEAD 以外的其他项目的归档文件,例如分支、提交、标签和目录。

创建本地分支 dev 的归档文件:

git archive --output=archive-dev.zip --prefix=src-directory-name dev

创建远程分支 origin/dev 的归档文件:

git archive --output=archive-dev.zip --prefix=src-directory-name origin/dev

创建标签 v.01 的归档文件:

git archive --output=archive-v.01.zip --prefix=src-directory-name v.01

创建特定子目录(sub-dir)中 HEAD 修订版本的文件的归档文件:

git archive --output=archive-sub-dir.zip --prefix=src-directory-name HEAD:sub-dir/