簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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>…​]

描述

建立指定格式的歸檔,其中包含指定樹的樹結構,並將其寫入標準輸出。如果指定了 ,它將新增到歸檔中檔名的前面。

git archive 在給定樹ID時,與給定提交ID或標籤ID時行為不同。當提供樹ID時,當前時間用作歸檔中每個檔案的修改時間。另一方面,當提供提交ID或標籤ID時,則使用引用的提交物件中記錄的提交時間。此外,如果使用tar格式,提交ID將儲存在全域性擴充套件pax頭中;可以使用 git get-tar-commit-id 提取。在ZIP檔案中,它作為檔案註釋儲存。

選項

--format=<fmt>

結果歸檔的格式。可能的值有 tar, zip, tar.gz, tgz,以及使用配置選項 tar.<format>.command 定義的任何格式。如果未給出 --format 且指定了輸出檔案,則格式將盡可能從檔名推斷(例如,寫入 foo.zip 會使輸出為 zip 格式)。否則,輸出格式為 tar

-l
--list

顯示所有可用格式。

-v
--verbose

向標準錯誤報告進度。

--prefix=<prefix>/

/ 新增到歸檔中的路徑前。可重複使用;其最右邊的值用於所有跟蹤檔案。參見下文,哪個值會被 --add-file 使用。

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

將歸檔寫入 而非標準輸出。

--add-file=<file>

將非跟蹤檔案新增到歸檔。可重複使用以新增多個檔案。檔案中歸檔中的路徑透過連線此 --add-file 之前最後一個 --prefix 選項的值(如果有)和 <file> 的基本名稱來構建。

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

將指定內容新增到歸檔。可重複使用以新增多個檔案。

<path> 引數可以以字面雙引號字元開頭和結尾;包含的檔名被解釋為C風格字串,即反斜槓被解釋為跳脫字元。如果路徑包含冒號,則必須加引號,以避免冒號被誤解為路徑和內容之間的分隔符,或者如果路徑以雙引號字元開頭或結尾。

檔案模式僅限於常規檔案,並且該選項可能受平臺相關的命令列限制。對於非平凡情況,請寫入一個未跟蹤檔案並改用 --add-file

請注意,與 --add-file 不同,在歸檔中建立的路徑不受 --prefix 選項的影響,因為可以提供完整的 <path> 作為選項的值。

--worktree-attributes

同時也在工作樹中的 .gitattributes 檔案中查詢屬性(參見 ATTRIBUTES)。

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

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

另請參閱

GIT

Git[1] 套件的一部分

scroll-to-top