はじめに
この実験では、git status --porcelain コマンドを使用して、Git リポジトリがクリーン(変更がない状態)であるかどうかを効率的に確認する方法を学びます。このコマンドは機械可読な出力を提供するため、スクリプト作成や迅速な状態確認に最適です。
標準の git status コマンドと --porcelain オプション付きのバージョンの違いを調べ、リポジトリがクリーンな場合と、追跡されていないファイルや変更されたファイルが含まれている場合の出力の変化を観察します。この実践的な経験を通じて、保留中の変更がないことをプログラムで検証する方法を実証します。
git status --porcelain を使ってクリーン状態を確認する
このステップでは、git status コマンドの便利なバリエーションである git status --porcelain について学びます。このコマンドは、クリーンで機械可読な出力を提供し、スクリプト作成や余分なテキストなしで迅速に状態を確認するのに最適です。
まず、プロジェクトディレクトリにいることを確認しましょう。ターミナルを開き、次のコマンドを入力します。
cd ~/project/my-time-machine
次に、標準の git status コマンドを再度実行して、リポジトリの現在の状態を確認します。前のステップでコミットを行ったばかりなので、クリーンな状態になっているはずです。
git status
作業ディレクトリがクリーンであることを示す、次のような出力が表示されるはずです。
On branch master
nothing to commit, working tree clean
では、--porcelain オプション付きのバージョンを試してみましょう。
git status --porcelain
リポジトリがクリーンな場合、このコマンドは何も出力しません。これが重要な違いです。このコマンドは、追跡されていない、変更された、またはステージされたファイルについてのみ出力を表示します。このため、保留中の変更があるかどうかを迅速に確認するのに非常に便利です。
なぜこれが便利なのでしょうか?あるアクションを実行する前に、未コミットの変更があるかどうかを知る必要があるスクリプトを書いているとしましょう。通常の git status の出力を解析するのは難しい場合があります。なぜなら、この出力は人間が読むために設計されているからです。一方、--porcelain の出力はスクリプト用に設計されているため、プログラムで変更を簡単に確認することができます。
次のステップでは、追跡されていないファイルや変更されたファイルがある場合の出力の変化を見ていきます。
追跡されていないまたは変更されたファイルがないことを確認する
このステップでは、リポジトリがクリーンなときに git status --porcelain コマンドが何も出力しないことを明示的に確認します。これにより、このコマンドが変更内容のみを表示するように設計されているという概念が強化されます。
まず、正しいディレクトリにいることを確認します。
cd ~/project/my-time-machine
次に、git status --porcelain コマンドを再度実行します。前回のコミット以降に何も変更を加えていないため、出力は何もないはずです。
git status --porcelain
このコマンドを実行した後、ターミナルに何も出力されない場合、作業ディレクトリはクリーンで、追跡されていないまたは変更されたファイルがないことを意味します。これは、--porcelain フラグを使用したときのクリーンなリポジトリの期待される動作です。
この出力がないことは、Git が追跡またはコミットする必要のある新しいまたは変更された内容を見つけていないことを明確に示しています。新しい変更を加える前や他の Git 操作を行う前に、クリーンな状態から始めていることを確認する迅速かつ効率的な方法です。
次のステップでは、いくつかの変更を加えて、--porcelain の出力がどのように変化するかを見ていきます。
異なるリポジトリ状態でテストする
このステップでは、リポジトリにいくつかの変更を加え、git status --porcelain がそれらをどのように報告するかを確認します。これにより、porcelain 出力で使用されるさまざまなコードを理解するのに役立ちます。
まず、正しいディレクトリにいることを確認します。
cd ~/project/my-time-machine
次に、新しい追跡されていないファイルを作成しましょう。このファイルを notes.txt と名付けます。
echo "Some random notes" > notes.txt
再度 git status --porcelain を実行します。
git status --porcelain
このとき、次のような出力が表示されるはずです。
?? notes.txt
?? は、notes.txt が追跡されていないファイルであることを示しています。Git はこのファイルを認識していますが、現在そのバージョンを管理していません。
次に、前にコミットした message.txt ファイルを変更しましょう。このファイルに別の行を追加します。
echo "Hello again, Future Me" >> message.txt
>> 演算子は、テキストを既存のファイルに追加します。上書きするのではありません。
再度 git status --porcelain を実行します。
git status --porcelain
このとき、次のような出力が表示されるはずです。
M message.txt
?? notes.txt
M は、message.txt が変更されたことを示しています。M の前の空白は、変更が作業ディレクトリにあるが、まだステージされていないことを意味します。notes.txt の ?? は、まだ追跡されていないためそのままです。
最後に、git add を使用して変更された message.txt ファイルをステージしましょう。
git add message.txt
そして、最後に一度 git status --porcelain を実行します。
git status --porcelain
このときの出力は次のようになるはずです。
M message.txt
?? notes.txt
M が最初の列に表示されているため、message.txt がコミットのためにステージされたことを示しています。2 番目の列の空白は、ステージされてから作業ディレクトリにさらなる変更がないことを意味します。notes.txt はまだ追跡されていません。
これらのコード(追跡されていない場合は ??、変更されたがステージされていない場合は 2 番目の列に M、ステージされた変更の場合は最初の列に M)を理解することは、git status --porcelain の出力を迅速に解釈するための重要なポイントです。
まとめ
この実験では、git status --porcelain コマンドを使用して Git リポジトリがクリーンであるかどうかを確認する方法を学びました。このコマンドは機械可読な出力を提供し、作業ディレクトリがクリーンなときは出力が空になることがわかりました。これは、クリーンなときでも人間が読みやすい情報を提供する標準の git status の出力とは対照的です。
クリーンなリポジトリで git status --porcelain を実行する練習を行い、何も出力されないことを確認しました。これにより、このコマンドがスクリプト作成や保留中の変更の迅速なチェックに有用であることがわかりました。



