すべての記事

MacのファイルマネージャでGitの状態を見る方法

· 11分で読めます

プロジェクトのフォルダを見ていて、その状態を知りたいことがあります。いまどのブランチにいるのか、前回のコミットからどのファイルが変わったのか、Gitがまだ追跡していない新しいファイルはどれか。Finderは教えてくれないので、いつもはターミナルを開いてcdしてからgit statusを打つか、コードエディタに切り替えることになります。

手短な答え:Finderは、Finderの機能拡張でファイルにバッジを付けるAppを入れないかぎり、Gitについて何も表示しません。ターミナルでは、プロジェクトのフォルダでgit status -sbを実行すると、ブランチと変更ごとの1行が表示されます。Folia Filesでは、プロジェクトをパネルで開くだけです。パネルのヘッダにブランチが表示され、リスト、詳細リスト、ツリーの各表示では、変更のあるファイルとフォルダに文字が付きます。Mは変更、Aは追加、Rは名前変更、Uは未追跡、!は競合です。

Finderに何も表示されない理由

Gitのリポジトリは、中に隠しフォルダ.gitがあるだけの普通のフォルダです。⇧⌘.でFinderにこのフォルダを表示させることはできますが、Finderはその中身を読みません。前回のコミットからファイルが変わったことを示す列も、バッジも、タグもなく、ブランチもどこにも表示されません。

macOSには、ほかのAppがFinderウインドウのファイルにバッジを描けるFinder Syncという機能拡張の仕組みがあり、Gitツールの中にもこれを使うものがあります。ただしそうした機能拡張が対象にするのは自分で登録したフォルダだけで、システム設定で許可するまで何も表示しません。

ターミナルで:git status

短い形式

プロジェクトのフォルダで開いたターミナルでは、git statusがすべての変更を文章で説明します。短い形式なら1画面に収まります。

git status -sb

-sは変更ごとに1行、-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/

1行目はブランチ名、それが追跡しているリモートブランチ、まだプッシュしていないコミット数(ahead)やまだプルしていないコミット数(behind)です。続く各行は2つの列で始まります。1列目はgit addでステージ済みの内容、2列目はその後に変わった内容です。Mは変更、Aは追加、Rは名前変更、Dは削除、??は未追跡、UUはマージで残った競合を表します。

ブランチだけ

git branch --show-currentはブランチ名だけを表示します。Oh My ZshのテーマやStarshipのプロンプトなど、多くのシェル設定ではプロンプトにもブランチが表示されます。

正しいフォルダでシェルを開ければ、半分は済んだようなものです。現在のフォルダでターミナルを開く方法では、FinderでのやりかたとFolia Filesでのやりかたを紹介しています。

コードエディタで

コードエディタは同じ情報を自分のウインドウに表示します。VS CodeはExplorerで変更のあるファイルの後ろに文字を付け、Source Controlビュー(⌃⇧G)に変更を一覧表示します。XcodeはProject navigatorで変更のあるファイルにMやAを付けます。ただし、まずプロジェクトをエディタで開く必要があります。フォルダをVS Code、Cursor、Xcodeで開く方法に、いちばん手早い方法をまとめています。

Folia FilesのパネルでGitの状態を見る

Folia Filesは状態を自分で読み取り、ほかのフォルダと並べて、ブラウズしているその場所に表示します。

Folia Filesのツリー表示にしたAtlasプロジェクト。README.mdとMapView.swiftにM、PhotoPin.swiftにA、MapTests.swiftにR、未追跡のNotesフォルダにUが付き、パネルのヘッダにはブランチphoto-pinsと↑2、変更5件

パネルのヘッダにブランチ

パネルがGitリポジトリの中のフォルダを表示していると、リポジトリの最上位でもその下のどこでも、ヘッダのパスと表示ボタンのあいだに小さなカプセルが現れます。ブランチのアイコンとブランチ名、続いてプッシュ待ちのコミットが2つなら↑2、プル待ちのコミットがあれば↓と件数、最後にオレンジの点と変更の数が並びます。たとえばphoto-pins ↑2 ● 5です(未追跡のフォルダは1件と数えます)。このカプセルはパネルの9つの表示のどれでも表示されます。パネルが狭いと最初に場所を譲り、ヘッダの…メニューにブランチ photo-pinsとして移ります。

変更ごとに1文字

リスト、詳細リスト、ツリーの各表示と「ブランチ」表示のカードでは、変更のあるファイルの行の末尾に色付きの文字が付きます。

  • M、オレンジ:変更。
  • A、緑:追加。git addでステージした新しいファイルです。
  • R、ターコイズ:名前変更。
  • U、緑:未追跡。Gitにとって新しいファイルです。未追跡のフォルダは、その中身もすべてUになります。
  • !、赤:マージ後の競合。

ファイル名にも同じ色がうっすらと付きます。フォルダには、中にあるいちばん重要な変更の文字が付きます(競合、追加、名前変更、変更、未追跡の順)。そのため、ツリー表示では閉じたフォルダを見ただけで、中に確認すべきものがあるとわかります。削除したファイルはもうフォルダにないので文字を付けられません。フォルダにはMが付き、ブランチのメニューにそのファイルが表示されます。.gitignoreで除外したファイルには、git statusと同じく文字が付きません。

git statusが2つの列で示すところを、Folia Filesはファイルごとに1文字で示します。変更がステージ済みかどうかはgit statusで確かめてください。アイコン、カラム、ギャラリー、モザイクの各表示では、ヘッダにブランチが出るだけで、文字は付きません。

ブランチのメニュー

カプセルをクリックするとメニューが開きます。ブランチと、それが追跡するリモートブランチ、プッシュ待ちとプル待ちのコミット数、そして変更のあるファイルが文字付きで、リポジトリのルートからのパス順に並びます(最大30件、削除したファイルは淡色表示)。どれかを選ぶと、パネルがそのフォルダに移動してファイルを選択します。下にはリポジトリのルートへ移動、ブランチ名をコピー、更新があります。

Folia FilesのAtlasパネルのブランチメニュー。ブランチ photo-pins → origin/photo-pins、プッシュ待ちのコミット2件、文字付きの5件の変更、続いてリポジトリのルートへ移動、ブランチ名をコピー、更新

読み取り専用で、作業の邪魔をしない

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など)を一覧表示して、選んだエディタでフォルダを開きます。
  • Webサイト版では、⌥⌘Tを押すか表示 › Terminalを選ぶと、パネルの下にそのフォルダのターミナルが開きます。パネルに追従をオンにすると、パネルがフォルダを移るたびにターミナルもついていきます。用意済みのコマンドGitの状態は、コンテキストメニューのコマンドサブメニューにあり、このターミナルにgit statusを入力します。そのほかの機能は内蔵ターミナルのページで紹介しています。

詳細リストにしたAtlasプロジェクト。Notes、Sources、Tests、README.mdの横に文字が付き、パネルの下の内蔵ターミナルには同じ変更を示すgit status -sbの結果

Mac App Store版の場合

Appleのサンドボックスにより、App Store版は自分でgitを実行できません。Mac App Store版では、この版向けの無料の補助App、Folia Files Companionが代わりにgit statusを実行し、Gitの状態が表示されます。Companionがなければ、ブランチも文字も設定項目も表示されません。内蔵ターミナルとコマンドはWebサイト版だけの機能で、エディタで開くはどちらの版にもあります。

どの方法を選ぶか

  • ときどき確認するだけなら:プロジェクトで開いたターミナルでgit status -sb。
  • コードを書いているあいだは:エディタのSource Controlビュー。
  • ファイルを見て回り、整理し、移動するあいだは:パネルのヘッダのブランチとリストの文字。エディタもターミナルもワンクリックで開けます。