設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
2.47.0
10/06/24
- 2.46.0 → 2.46.2 無變更
- 2.45.2 無變更
-
2.45.1
04/29/24
- 2.45.0 無變更
- 2.44.2 無變更
-
2.44.1
04/19/24
- 2.44.0 無變更
- 2.43.5 無變更
-
2.43.4
04/19/24
- 2.43.1 → 2.43.3 無變更
-
2.43.0
11/20/23
- 2.42.3 無變更
-
2.42.2
04/19/24
- 2.42.0 → 2.42.1 無變更
- 2.41.2 無變更
-
2.41.1
04/19/24
- 2.41.0 無變更
- 2.40.3 無變更
-
2.40.2
04/19/24
- 2.40.0 → 2.40.1 無變更
- 2.39.5 無變更
-
2.39.4
04/19/24
- 2.39.3 無變更
-
2.39.2
02/06/23
- 2.39.1 無變更
-
2.39.0
12/12/22
- 2.38.1 → 2.38.5 無變更
-
2.38.0
10/02/22
- 2.35.1 → 2.37.7 無變更
-
2.35.0
01/24/22
- 2.30.2 → 2.34.8 無變更
- 2.30.1 無變更
- 2.22.2 → 2.30.0 無變更
-
2.22.1
08/11/19
-
2.22.0
06/07/19
- 2.21.1 → 2.21.4 無變更
-
2.21.0
02/24/19
- 2.19.1 → 2.20.5 無變更
-
2.19.0
09/10/18
- 2.11.4 → 2.18.5 無變更
-
2.10.5
09/22/17
-
2.9.5
07/30/17
- 2.7.6 → 2.8.6 無變更
-
2.6.7
05/05/17
- 2.1.4 → 2.5.6 無變更
-
2.0.5
12/17/14
概要
git fsck [--tags] [--root] [--unreachable] [--cache] [--no-reflogs] [--[no-]full] [--strict] [--verbose] [--lost-found] [--[no-]dangling] [--[no-]progress] [--connectivity-only] [--[no-]name-objects] [<object>…]
選項
- <物件>
-
作為無法連線追蹤起點的物件。
如果沒有提供任何物件,git fsck 預設會使用索引檔、
refs
命名空間中的所有 SHA-1 參照,以及所有 reflog(除非給定 --no-reflogs)作為起點。 - --unreachable
-
印出存在但無法從任何參照節點連線到的物件。
- --[no-]dangling
-
印出存在但從未使用過的物件(預設)。
--no-dangling
可用來從輸出中省略此資訊。 - --root
-
報告根節點。
- --tags
-
報告標籤。
- --cache
-
將索引中記錄的任何物件也視為無法連線追蹤的起點。
- --no-reflogs
-
不將僅透過 reflog 中的條目參照的提交視為可連線。此選項僅用於搜尋曾經在 ref 中但現在不在其中的提交,但仍存在於對應的 reflog 中。
- --full
-
不僅檢查 GIT_OBJECT_DIRECTORY ($GIT_DIR/objects) 中的物件,還檢查 GIT_ALTERNATE_OBJECT_DIRECTORIES 或 $GIT_DIR/objects/info/alternates 中列出的替代物件池中,以及 $GIT_DIR/objects/pack 和替代物件池中對應的 pack 子目錄中找到的已打包 Git 封存檔中的物件。這現在是預設值;您可以使用 --no-full 將其關閉。
- --connectivity-only
-
僅檢查可連線物件的連線能力,確保可連線標籤、提交或樹狀結構參照的任何物件都存在。這透過完全避免讀取 blob 來加速操作(儘管它仍然會檢查參照的 blob 是否存在)。這將檢測提交和樹狀結構中的損壞,但不執行任何語義檢查(例如,格式錯誤)。blob 物件中的損壞將根本無法檢測到。
也會存取無法連線的標籤、提交和樹狀結構,以找到懸掛歷史區段的起點。如果您不關心此輸出並想進一步加速它,請使用
--no-dangling
。 - --strict
-
啟用更嚴格的檢查,即捕捉使用 g+w 位元組設定記錄的檔案模式,這是由舊版本的 Git 建立的。現有的儲存庫,包括 Linux 核心、Git 本身和稀疏儲存庫都有觸發此檢查的舊物件,但建議使用此旗標檢查新專案。
- --verbose
-
顯示詳細資訊。
- --lost-found
-
根據類型將懸掛物件寫入 .git/lost-found/commit/ 或 .git/lost-found/other/。如果物件是 blob,則內容會寫入檔案中,而不是其物件名稱。
- --name-objects
-
在顯示可連線物件的名稱時,除了 SHA-1 之外,還會顯示一個描述它們如何可連線的名稱,與 git-rev-parse[1] 相容,例如
HEAD@{1234567890}~25^2:src/
。 - --[no-]progress
-
預設情況下,當進度狀態連接到終端機時,會在標準錯誤串流上報告進度狀態,除非指定 --no-progress 或 --verbose。即使標準錯誤串流未定向到終端機,--progress 也會強制顯示進度狀態。
組態
此部分中此行下方的所有內容都從 git-config[1] 文件中選擇性地包含。內容與在那裡找到的內容相同
- fsck.<msg-id>
-
在 fsck 期間,git 可能會發現舊版資料存在問題,這些資料不會由目前版本的 git 產生,而且如果設定
transfer.fsckObjects
也不會透過網路傳送。此功能旨在支援使用包含此類資料的舊版儲存庫。設定
fsck.<msg-id>
會由 git-fsck[1] 擷取,但是要接受此類資料的推送,請改為設定receive.fsck.<msg-id>
,或者要複製或擷取它,請設定fetch.fsck.<msg-id>
。文件的其餘部分為了簡潔起見討論
fsck.*
,但是相同的內容適用於對應的receive.fsck.*
和fetch.fsck.*
變數。與
color.ui
和core.editor
等變數不同,如果未設定receive.fsck.<msg-id>
和fetch.fsck.<msg-id>
變數,則不會回復為fsck.<msg-id>
組態。若要在不同情況下統一組態相同的 fsck 設定,則必須將它們全部設定為相同的值。當設定
fsck.<msg-id>
時,可以透過組態fsck.<msg-id>
設定將錯誤切換為警告,反之亦然,其中<msg-id>
是 fsck 訊息 ID,而值是error
、warn
或ignore
其中之一。為了方便起見,fsck 會在錯誤/警告前面加上訊息 ID,例如 "missingEmail: invalid author/committer line - missing email" 表示設定fsck.missingEmail = ignore
會隱藏該問題。一般而言,最好使用
fsck.skipList
列舉存在問題的物件,而不是列出這些有問題的物件共有的中斷類型以忽略,因為這樣做會讓相同中斷的新實例被忽略。設定未知的
fsck.<msg-id>
值會導致 fsck 終止,但是針對receive.fsck.<msg-id>
和fetch.fsck.<msg-id>
執行相同的操作只會導致 git 發出警告。請參閱 git-fsck[1] 的
Fsck Messages
部分,了解<msg-id>
的支援值。 - fsck.skipList
-
已知以非致命方式損壞且應忽略的物件名稱清單的路徑(即,每行一個未縮寫的 SHA-1)。在 Git 2.20 和更新版本中,會忽略註解(#)、空白行以及任何開頭和結尾的空白字元。除了每行一個 SHA-1 之外的所有內容都會在較舊的版本上產生錯誤。
當應接受已建立的專案,儘管早期提交包含可以安全忽略的錯誤(例如,無效的提交者電子郵件地址)時,此功能很有用。注意:無法使用此設定略過損壞的物件。
與
fsck.<msg-id>
一樣,此變數具有對應的receive.fsck.skipList
和fetch.fsck.skipList
變體。與
color.ui
和core.editor
等變數不同,如果未設定receive.fsck.skipList
和fetch.fsck.skipList
變數,則不會回復為fsck.skipList
組態。若要在不同情況下統一組態相同的 fsck 設定,則必須將它們全部設定為相同的值。舊版的 Git(2.20 之前的版本)說明物件名稱清單應該排序。這從來都不是要求;物件名稱可以以任何順序出現,但是在讀取清單時,我們會追蹤清單是否已排序,以便進行內部二元搜尋實作,這可以使用已排序的清單來節省一些工作。除非您有一個龐大的清單,否則沒有理由特意預先排序清單。在 Git 2.20 版本之後,改用雜湊實作,因此現在沒有理由預先排序清單。
討論
git-fsck 測試 SHA-1 和一般物件的健全性,並且它會完整追蹤產生的可連線能力和所有其他項目。它會印出它發現的任何損壞(遺失或損壞的物件),如果您使用 --unreachable
旗標,它也會印出存在但無法從任何指定的起點節點(或如上所述的預設集合)連線到的物件。
您將必須在備份或其他封存檔中找到任何損壞的物件(即,您可以直接刪除它們,並與其他網站執行 rsync,希望其他人擁有您已損壞的物件)。
如果 core.commitGraph 為 true,則會使用 git commit-graph verify 來檢查 commit-graph 檔案。請參閱 git-commit-graph[1]。
提取的診斷訊息
- unreachable <類型> <物件>
-
類型為 <類型> 的物件 <物件>,實際上在任何看到的樹狀結構或提交中,都未被直接或間接引用。這可能表示您未指定另一個根節點,或是樹狀結構已損壞。如果您沒有遺漏任何根節點,那麼您不妨刪除無法連線的節點,因為它們無法被使用。
- missing <類型> <物件>
-
類型為 <類型> 的物件 <物件> 被引用,但不存在於資料庫中。
- dangling <類型> <物件>
-
類型為 <類型> 的物件 <物件> 存在於資料庫中,但從未被直接使用。懸空的提交可能是一個根節點。
- hash mismatch <物件>
-
資料庫中存在一個物件,其雜湊值與物件資料庫的值不符。這表示嚴重的資料完整性問題。
FSCK 訊息
以下列出 git fsck
偵測到的錯誤類型,以及每個錯誤的含義,以及其預設嚴重性。除了標記為「(FATAL)」的錯誤外,其他錯誤的嚴重性可以透過設定對應的 fsck.<msg-id>
組態變數來調整。
-
badDate
-
(錯誤) 作者/提交者行中的日期格式無效。
-
badDateOverflow
-
(錯誤) 作者/提交者行中的日期值無效。
-
badEmail
-
(錯誤) 作者/提交者行中的電子郵件格式無效。
-
badFilemode
-
(資訊) 一個樹狀結構包含錯誤的檔案模式條目。
-
badName
-
(錯誤) 作者/提交者名稱為空。
-
badObjectSha1
-
(錯誤) 物件的 sha1 值錯誤。
-
badParentSha1
-
(錯誤) 提交物件的父提交 sha1 值錯誤。
-
badRefFiletype
-
(錯誤) 參照的檔案類型錯誤。
-
badRefName
-
(錯誤) 參照的格式無效。
-
badTagName
-
(資訊) 標籤的格式無效。
-
badTimezone
-
(錯誤) 在作者/提交者行中找到無效的時區。
-
badTree
-
(錯誤) 無法解析樹狀結構。
-
badTreeSha1
-
(錯誤) 樹狀結構的格式無效。
-
badType
-
(錯誤) 找到無效的物件類型。
-
duplicateEntries
-
(錯誤) 樹狀結構包含重複的檔案條目。
-
emptyName
-
(警告) 路徑包含一個空的名稱。
-
extraHeaderEntry
-
(忽略) 在
tagger
之後找到額外的標頭。 -
fullPathname
-
(警告) 路徑包含以「/」開頭的完整路徑。
-
gitattributesBlob
-
(錯誤) 在
.gitattributes
找到非 blob 的物件。 -
gitattributesLarge
-
(錯誤)
.gitattributes
blob 過大。 -
gitattributesLineLength
-
(錯誤)
.gitattributes
blob 包含過長的行。 -
gitattributesMissing
-
(錯誤) 無法讀取
.gitattributes
blob。 -
gitattributesSymlink
-
(資訊)
.gitattributes
是一個符號連結。 -
gitignoreSymlink
-
(資訊)
.gitignore
是一個符號連結。 -
gitmodulesBlob
-
(錯誤) 在
.gitmodules
找到非 blob 的物件。 -
gitmodulesLarge
-
(錯誤)
.gitmodules
檔案過大,無法解析。 -
gitmodulesMissing
-
(錯誤) 無法讀取
.gitmodules
blob。 -
gitmodulesName
-
(錯誤) 子模組名稱無效。
-
gitmodulesParse
-
(資訊) 無法解析
.gitmodules
blob。
gitmodulesLarge
; (錯誤) .gitmodules
blob 過大,無法解析。
-
gitmodulesPath
-
(錯誤)
.gitmodules
路徑無效。 -
gitmodulesSymlink
-
(錯誤)
.gitmodules
是一個符號連結。 -
gitmodulesUpdate
-
(錯誤) 找到無效的子模組更新設定。
-
gitmodulesUrl
-
(錯誤) 找到無效的子模組網址。
-
hasDot
-
(警告) 樹狀結構包含一個名為
.
的條目。 -
hasDotdot
-
(警告) 樹狀結構包含一個名為
..
的條目。 -
hasDotgit
-
(警告) 樹狀結構包含一個名為
.git
的條目。 -
largePathname
-
(警告) 樹狀結構包含一個路徑名稱非常長的條目。如果
fsck.largePathname
的值包含冒號,則該值會用作允許的最大長度(例如,「warn:10」會抱怨任何 11 個或更多位元組的路徑組件)。預設值為 4096。 -
mailmapSymlink
-
(資訊)
.mailmap
是一個符號連結。 -
missingAuthor
-
(錯誤) 作者遺失。
-
missingCommitter
-
(錯誤) 提交者遺失。
-
missingEmail
-
(錯誤) 作者/提交者行中遺失電子郵件。
-
missingNameBeforeEmail
-
(錯誤) 在作者/提交者行的電子郵件之前遺失名稱。
-
missingObject
-
(錯誤) 標籤物件中遺失
object
行。 -
missingSpaceBeforeDate
-
(錯誤) 作者/提交者行的日期之前遺失空格。
-
missingSpaceBeforeEmail
-
(錯誤) 作者/提交者行的電子郵件之前遺失空格。
-
missingTag
-
(錯誤) 在標籤物件的
type
行之後出現非預期的結尾。 -
missingTagEntry
-
(錯誤) 標籤物件中遺失
tag
行。 -
missingTaggerEntry
-
(資訊) 標籤物件中遺失
tagger
行。 -
missingTree
-
(錯誤) 提交物件中遺失
tree
行。 -
missingType
-
(錯誤) 標籤物件的
type
行中的類型值無效。 -
missingTypeEntry
-
(錯誤) 標籤物件中遺失
type
行。 -
multipleAuthors
-
(錯誤) 在一個提交中找到多個作者行。
-
nulInCommit
-
(警告) 在提交物件的主體中找到 NUL 位元組。
-
nulInHeader
-
(致命) 物件標頭中存在 NUL 位元組。
-
nullSha1
-
(警告) 樹狀結構包含指向 null sha1 的條目。
-
treeNotSorted
-
(錯誤) 樹狀結構未正確排序。
-
unknownType
-
(錯誤) 找到未知的物件類型。
-
unterminatedHeader
-
(致命) 物件標頭中遺失行尾符號。
-
zeroPaddedDate
-
(錯誤) 在作者/提交者行中找到以零填充的日期。
-
zeroPaddedFilemode
-
(警告) 在樹狀結構中找到以零填充的檔案模式。
GIT
屬於 git[1] 工具組的一部分