簡體中文 ▾ 主題 ▾ 最新版本 ▾ 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 指向的檔案,以便我們始終可以看到最後一次提交的狀態。

選項

<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 將簡單地等待輸入,直到按下 Ctrl+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 進行編碼。這適用於 tree 物件、索引檔案、引用名稱,以及命令列引數、環境變數和配置檔案(.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

    使用上述設定建立的提交物件會將其 i18n.commitEncoding 的值記錄在它們的 encoding 頭中。這是為了幫助以後檢視它們的人。缺少此頭表示提交日誌訊息是 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] 套件的一部分