Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-commit-tree 最後更新於 2.45.0

名稱

git-commit-tree - 建立新的提交物件

概要

git commit-tree <tree> [(-p <parent>)…​]
git commit-tree [(-p <parent>)…​] [-S[<keyid>]] [(-m <message>)…​]
		  [(-F <file>)…​] <tree>

描述

這通常不是終端使用者想要直接執行的命令。請改用 git-commit[1]

根據提供的樹狀物件建立新的提交物件,並在標準輸出上發出新的提交物件 ID。除非提供 -m-F 選項,否則日誌訊息會從標準輸入讀取。

-m-F 選項可以以任何順序給定任何次數。提交日誌訊息會依照選項給定的順序組成。

一個提交物件可以有任意數量的父物件。只有一個父物件時,它是一個普通的提交。有多個父物件會使提交成為多條歷史記錄線之間的合併。初始(根)提交沒有父物件。

雖然樹狀結構表示工作目錄的特定目錄狀態,但提交表示該狀態在「時間」中的狀態,並解釋如何到達該狀態。

通常提交會識別新的「HEAD」狀態,雖然 Git 並不在乎您將該狀態的附註儲存在哪裡,但在實務上,我們傾向於將結果寫入 .git/HEAD 所指向的檔案,以便我們始終可以看到上次提交的狀態。

選項

<tree>

現有的樹狀物件。

-p <parent>

每個 -p 都表示父提交物件的 ID。

-m <message>

提交日誌訊息中的一個段落。可以給定多次,每個 <message> 都會成為自己的段落。

-F <file>

從給定的檔案讀取提交日誌訊息。使用 - 從標準輸入讀取。可以給定多次,每個檔案的內容都會成為自己的段落。

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG 簽署提交。keyid 引數是可選的,預設為提交者身分;如果指定,則必須不帶空格地附加到選項。--no-gpg-sign 可用於撤銷先前在命令列中給定的 --gpg-sign 選項。

提交資訊

提交封裝

  • 所有父物件 ID

  • 作者姓名、電子郵件和日期

  • 提交者姓名和電子郵件以及提交時間。

提交註解會從標準輸入讀取。如果未透過 "<" 重新導向提供變更日誌項目,則git commit-tree 會等待輸入一個項目並以 ^D 終止。

日期格式

GIT_AUTHOR_DATEGIT_COMMITTER_DATE 環境變數支援下列日期格式

Git 內部格式

格式為 <unix-timestamp> <time-zone-offset>,其中 <unix-timestamp> 是自 UNIX Epoch 以來的秒數。<time-zone-offset> 是與 UTC 的正或負時差。例如,CET(比 UTC 早 1 小時)是 +0100

RFC 2822

RFC 2822 所述的標準日期格式,例如 Thu, 07 Apr 2005 22:13:13 +0200

ISO 8601

ISO 8601 標準指定的日期和時間,例如 2005-04-07T22:13:13。剖析器也接受空格來代替 T 字元。秒的小數部分會被忽略,例如 2005-04-07T22:13:13.019 會被視為 2005-04-07T22:13:13

注意
此外,日期部分接受下列格式:YYYY.MM.DDMM/DD/YYYYDD.MM.YYYY

討論

Git 在某種程度上不區分字元編碼。

  • Blob 物件的內容是未經解譯的位元組序列。核心層次沒有編碼轉換。

  • 路徑名稱以 UTF-8 正規化形式 C 編碼。這適用於樹狀物件、索引檔案、參照名稱,以及命令列引數、環境變數和組態檔案中的路徑名稱(.git/config (請參閱 git-config[1])、gitignore[5]gitattributes[5]gitmodules[5])。

    請注意,核心層次的 Git 只將路徑名稱視為非 NUL 位元組的序列,沒有路徑名稱編碼轉換(Mac 和 Windows 除外)。因此,即使在使用傳統擴充 ASCII 編碼的平台和檔案系統上,使用非 ASCII 路徑名稱也大多可以正常運作。但是,在此類系統上建立的儲存庫在基於 UTF-8 的系統(例如 Linux、Mac、Windows)上無法正常運作,反之亦然。此外,許多基於 Git 的工具只假設路徑名稱為 UTF-8,並且無法正確顯示其他編碼。

  • 提交日誌訊息通常以 UTF-8 編碼,但也支援其他擴充 ASCII 編碼。這包括 ISO-8859-x、CP125x 和許多其他編碼,但包括 UTF-16/32、EBCDIC 和 CJK 多位元組編碼(GBK、Shift-JIS、Big5、EUC-x、CP9xx 等)。

雖然我們鼓勵提交日誌訊息以 UTF-8 編碼,但核心和 Git Porcelain 的設計目的都不是強制專案使用 UTF-8。如果特定專案的所有參與者都覺得使用傳統編碼更方便,Git 並不禁止。但是,有幾件事需要注意。

  1. 如果提供給 git commitgit commit-tree 的提交日誌訊息看起來不像有效的 UTF-8 字串,除非您明確說明您的專案使用傳統編碼,否則會發出警告。表達此意的方式是在 .git/config 檔案中加入 i18n.commitEncoding,如下所示

    [i18n]
    	commitEncoding = ISO-8859-1

    使用上述設定建立的提交物件會在它們的 encoding 標頭中記錄 i18n.commitEncoding 的值。這有助於稍後檢視它們的其他人。缺少此標頭表示提交日誌訊息以 UTF-8 編碼。

  2. git loggit showgit blame 和相關命令會檢視提交物件的 encoding 標頭,並嘗試將日誌訊息重新編碼為 UTF-8,除非另有指定。您可以使用 .git/config 檔案中的 i18n.logOutputEncoding 來指定所需的輸出編碼,如下所示

    [i18n]
    	logOutputEncoding = ISO-8859-1

    如果您沒有這個組態變數,則會改用 i18n.commitEncoding 的值。

請注意,我們刻意選擇在進行提交時不重新編碼提交日誌訊息以強制提交物件層級使用 UTF-8,因為重新編碼為 UTF-8 不一定是可逆的操作。

檔案

/etc/mailname

GIT

屬於 git[1] 套件的一部分

scroll-to-top