如何在 Mac 文件管理器中查看 Git 状态

你正在浏览一个项目的文件夹,想知道它现在的状况:当前在哪个分支,上次提交以来哪些文件改动了,哪些新文件 Git 还没有跟踪。访达不会告诉你,所以通常要绕个弯:打开终端,cd 进去,再输入 git status,或者切换到代码编辑器。
简短的回答:访达不显示任何 Git 信息,除非你安装一个通过访达扩展给文件加标记的 App。在终端里,于项目文件夹中运行 git status -sb,会显示分支,以及每处改动一行。在 Folia Files 中,只需在面板里打开项目:面板的标题栏会显示分支;在列表、详细列表和树状视图中,每个有改动的文件和文件夹都会带一个字母:M 表示已修改,A 表示已添加,R 表示已重新命名,U 表示未跟踪,! 表示有冲突。
为什么访达什么都不显示
Git 仓库就是一个普通的文件夹,里面有一个隐藏的 .git 文件夹。按 ⇧⌘. 可以让访达显示这个文件夹,但访达不会读取它:没有任何一栏、标记或标签说明某个文件在上次提交后改动过,分支也无处可见。
macOS 确实允许其他 App 通过访达同步扩展(Finder Sync)在访达窗口的文件上绘制标记,有些 Git 工具就是这么做的。不过这类扩展只覆盖它自己登记的文件夹,而且要在“系统设置”中允许之后才会显示内容。
在终端中:git status
简短格式
在打开于项目文件夹的终端中,git status 会用完整的句子描述每处改动。它的简短形式一屏就能放下:
git status -sb
-s 让每处改动占一行,-b 在最上面加上分支。对于下文截图里的 Atlas 项目,它的回答是:
## photo-pins...origin/photo-pins [ahead 2]
M README.md
M Sources/Atlas/MapView.swift
A Sources/Atlas/PhotoPin.swift
R Tests/AtlasTests.swift -> Tests/MapTests.swift
?? Notes/
第一行给出分支名、它跟踪的远程分支,以及你还没有推送(ahead)或还没有拉取(behind)的提交数。之后的每一行以两列开头:第一列表示已暂存的内容,也就是已经用 git add 添加的;第二列表示之后又改动的内容。M 表示已修改,A 表示已添加,R 表示已重新命名,D 表示已删除,?? 表示未跟踪,UU 表示合并留下的冲突。
只看分支
git branch --show-current 只显示分支名。很多 shell 配置,比如 Oh My Zsh 的主题或 Starship 提示符,也会把分支放进提示符里。
在正确的文件夹里打开 shell,事情就完成了一半:如何在当前文件夹中打开终端介绍了访达的做法和 Folia Files 的做法。
在代码编辑器中
代码编辑器会在自己的窗口里显示同样的信息。VS Code 在 Explorer 中给每个改动过的文件后面加一个字母,并在 Source Control 视图(⌃⇧G)中列出改动;Xcode 则在 Project navigator 中用 M 或 A 标出改动过的文件。前提是先在编辑器里打开项目,如何在 VS Code、Cursor 或 Xcode 中打开文件夹介绍了最快的方法。
在 Folia Files 的面板中查看 Git 状态
Folia Files 自己读取状态,并把它显示在你浏览的地方,就在你的其他文件夹旁边。

面板标题栏中的分支
当面板显示的是某个 Git 仓库里的文件夹时,无论是仓库的顶层还是更深的任何一层,标题栏的路径和视图按钮之间都会出现一个小胶囊:分支图标和分支名,然后是表示两个待推送提交的 ↑2、表示待拉取提交的 ↓ 加数字,最后是一个橙色圆点和改动数,例如 photo-pins ↑2 ● 5(一个未跟踪的文件夹算一处)。在面板的九种视图中,它都会一直显示。面板太窄时,它最先让出位置:移到标题栏的 … 菜单里,名为 分支 photo-pins。
每处改动一个字母
在列表、详细列表和树状视图中,以及“分支”视图的卡片里,每个有改动的文件都会在行尾带一个彩色字母:
- M,橙色:已修改。
- A,绿色:已添加,即用
git add暂存的新文件。 - R,青色:已重新命名。
- U,绿色:未跟踪,对 Git 来说是新的。未跟踪的文件夹及其中的所有内容都会带 U。
- !,红色:合并后有冲突。
文件名也会带上一点同样的颜色。文件夹会带上其中最重要的那种改动的字母(依次是冲突、添加、重新命名、修改、未跟踪),所以在树状视图中,一个合着的文件夹就已经告诉你里面有东西需要看。已删除的文件已经不在文件夹里,无法带字母:它所在的文件夹会显示 M,分支菜单里也会列出这个文件。被 .gitignore 排除的文件不带字母,和 git status 一样。
git status 用两列表示的地方,Folia Files 每个文件只用一个字母:改动是否已经暂存,要由 git status 来告诉你。图标、分栏、图库和照片墙视图只在标题栏显示分支,不显示字母。
分支菜单
点按胶囊即可打开它的菜单:分支和它跟踪的远程分支,待推送和待拉取的提交数,然后是带字母的已改动文件,按从仓库根目录起的路径排列(最多 30 个,已删除的显示为灰色)。选择其中一个,面板就会进入它所在的文件夹并选中该文件。最下面是 前往仓库根目录、拷贝分支名称 和 刷新。

只读,不碍事
Folia Files 只在后台运行 git status。它从不暂存、提交或抓取任何东西,运行 git status 时还会带上 GIT_OPTIONAL_LOCKS=0。Git 的文档把这个变量描述为供后台工具使用的设置:没有它,git status 可能会为了刷新索引而短暂占用仓库的索引锁,恰好在那一刻输入的 git commit 就可能停下,提示“Another git process seems to be running in this repository”。
当面板文件夹中的文件发生变化时,状态会重新读取,也就是你保存一个文件之后不久;刷新 则可以随时重新读取。↑ 和 ↓ 的数字是把你的分支与上次 git fetch 或 git pull 时的远程分支相比较:Folia Files 从不连接远程仓库。
需要什么
- Mac 上的 Git:Folia Files 使用已经安装的
git,即 Homebrew 的,或者随 Xcode 或其命令行工具(Command Line Tools)提供的。在两者都没有的 Mac 上,它什么也不显示,也绝不会弹出 macOS 提议安装开发者工具的对话框。在终端中运行xcode-select --install即可安装它们。 - 设置:设置 › 面板 的 内容 部分中的 显示 Git 状态(分支和已修改的文件),一开始就是打开的。关闭它,就会在所有地方隐藏分支和字母。
- 这台 Mac 上的文件夹:服务器或网络磁盘上的文件夹没有 Git 状态,因此慢速服务器永远不会拖住面板。位于个人文件夹顶层的仓库(用来管理配置文件,也就是 dotfiles 的那种)会被忽略,否则每个文件都会带上字母。
git status需要几秒以上的仓库什么也不显示。
在同一个窗口里接着操作
你在面板里看到的东西,往往让你想提交一下,或者看看差异:
- 在编辑器中打开 位于项目文件夹的右键菜单中,或面板空白处的右键菜单中,会列出你 Mac 上安装的代码编辑器,如 VS Code、Cursor、Xcode 等,并在你选择的那个里打开文件夹。
- 在网站版中,按 ⌥⌘T 或选择 显示 › Terminal,就会在面板下方打开一个位于该文件夹的终端;勾选 跟随面板 后,它会随面板从一个文件夹跟到另一个文件夹。现成的命令 Git 状态 位于右键菜单的 命令 子菜单中,会把
git status输入这个终端。其余功能见内建终端页面。

在 Mac App Store 版中
Apple 的沙盒不允许 App Store 版自己运行 git。在这个版本中,Git 状态由该版本的免费辅助 App Folia Files Companion 代为运行 git status 来提供;没有 Companion,分支、字母和设置项都不会出现。内建终端和命令只在网站版中提供;在编辑器中打开 两个版本都有。
该选哪种方法
- 偶尔看一眼:在打开于项目的终端里运行
git status -sb。 - 写代码时:编辑器的 Source Control 视图。
- 浏览、整理和移动文件时:面板标题栏中的分支和列表里的字母,编辑器和终端都只需点一下。


