簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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 輸出將被管道傳輸。該命令使用 shell 執行,生成的 tar 檔案在標準輸入上,並且應在其標準輸出上生成最終輸出。任何壓縮級別選項都將傳遞給該命令(例如,-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 版本建立壓縮的 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

將當前 HEAD 的 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/)。

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

配置用於建立 LZMA 壓縮 tar 檔案的“tar.xz”格式。您可以透過指定 --format=tar.xz 來使用它,或者透過建立類似 -o foo.tar.xz 的輸出檔案來使用。

另請參閱

GIT

Git[1] 套件的一部分