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>,則會將其附加到封存中的檔案名稱。

當提供樹狀結構 ID 而不是提交 ID 或標籤 ID 時,git archive 的行為會有所不同。當提供樹狀結構 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 格式會自動定義,預設使用 magic 命令 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 壓縮檔,其中包含目前分支上最新提交的內容,沒有前置詞,以及前置詞為 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