Git 常用標志(M、A 等)的含義
- 在 VSCode 的源代碼管理(Source Control)標簽頁中,文件右側顯示的 Monaco 裝飾徽章(Badge)(如 M、A 等),本質上是對 Git 文件狀態標志 的可視化呈現。這些標志對應 Git 中文件的變更類型,既在 Git 命令行工具(如 git status、git diff)中使用,也在 VSCode 的 UI 中通過 Monaco Editor 的裝飾系統顯示。
-
使用 man git diff-files 或 man git-status 可查看狀態標志的官方說明。
-
在 Git 源碼的 diff.h 中搜索 DIFF_STATUS_ADDED,可確認標志與枚舉值的映射關系。
/* diff-raw status letters */#define DIFF_STATUS_ADDED 'A'#define DIFF_STATUS_COPIED 'C'#define DIFF_STATUS_DELETED 'D'#define DIFF_STATUS_MODIFIED 'M'#define DIFF_STATUS_RENAMED 'R'#define DIFF_STATUS_TYPE_CHANGED 'T'#define DIFF_STATUS_UNKNOWN 'X'#define DIFF_STATUS_UNMERGED 'U'/* these are not diff-raw status letters proper, but used by* diffcore-filter insn to specify additional restrictions.*/#define DIFF_STATUS_FILTER_AON '*'#define DIFF_STATUS_FILTER_BROKEN 'B'________________________________________________enum diff_operation {DO_DELETE = 1, /* D:刪除 */DO_ADD, /* A:添加 */DO_MODIFY, /* M:修改 */DO_COPY, /* C:復制 */DO_RENAME, /* R:重命名 */DO_NOOP, /* 無操作(內部使用) */DO_UNKNOWN /* 未知操作 */};
-
VSCode 中 Monaco 裝飾徽章的實現
- VSCode 的源代碼管理模塊通過讀取 Git 狀態(如 git status --porcelain 的輸出),將文件狀態映射為 Monaco Editor 的 裝飾徽章,顯示在文件列表右側。具體邏輯如下:
- 狀態標志與徽章的映射
A(新增):通常顯示為 綠色徽章,表示文件未被版本控制跟蹤,或新添加到暫存區。
M(修改):顯示為 黃色徽章,表示文件內容已修改(未暫存或已暫存)。
D(刪除):顯示為 紅色徽章,表示文件被刪除。
R(重命名):可能顯示為 藍色徽章,并附帶原文件名(如 R old.txt)。
U(未合并):顯示為 橙色徽章,表示存在合并沖突,需手動處理。
A(DO_ADD): 本地新增的文件(服務器上沒有)
C(DO_COPY): 文件的一個新拷貝
D(DO_DELETE): 本地刪除的文件(服務器上還在)
M(DO_MODIFY): 文件的內容或者 mode 被修改了
R(DO_RENAME): 文件名被修改了
T: 文件的類型被修改了
U: 文件沒有被合并(需要完成合并才能進行提交)
X: 未知狀態(很可能是遇到了 git 的 bug,可以向 git 提交 bug report)
- 狀態標志與徽章的映射