簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-commit-tree 最後更新於 2.49.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 指向的檔案中,這樣我們就可以始終看到最後一次提交的狀態。

選項

<樹物件>

一個已存在的樹物件。

-p <父物件>

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

-m <訊息>

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

-F <檔案>

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

-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 紀元以來的秒數。<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 在核心層面將路徑名簡單地視為非空位元組序列,除了在 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 核心和 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