このセクションでは、git clean
コマンドの詳細な説明を中心に説明します。 Git clean
はある程度「元に戻す」コマンドです。 Git clean
は git reset
や git checkout
のような他のコマンドを補完するものと考えることができる。 これらのコマンドは Git のトラッキング・インデックスに追加されたファイルに対して操作するのに対し、git clean
コマンドは未トラックのファイルに対して操作します。 未追跡のファイルとは、リポジトリの作業ディレクトリ内に作成されたものの、git add
コマンドを使用してリポジトリの追跡インデックスにまだ追加されていないファイルのことです。 追跡済みファイルと未追跡ファイルの違いをよりよく示すために、次のコマンドラインの例を考えてみましょう。 そして、Git インデックスに追加される tracked_file
を作成し、さらに untracked_file
と untracked_dir
を作成します。 この例では、次に git status
を起動し、Git の内部状態である追跡済みの変更と未追跡の変更を示す出力を表示します。 この状態で、git clean
コマンドを実行して、その意図するところを実証してみましょう。
$ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
この時点で、デフォルトのgit clean
コマンドを実行すると、致命的なエラーが発生する可能性があります。 上の例は、これがどのように見えるかを示しています。 デフォルトでは、Gitはグローバルに、git clean
を開始するために「force」オプションを渡されることを要求するように設定されています。 これは重要な安全機構です。 最終的にgit clean
が実行されると、元に戻すことはできません。 完全に実行されると、git clean
はコマンドラインの rm ユーティリティを実行するのと同じように、ファイルシステムをハードディスクから削除します。
共通オプションと使用法
これまでの git clean
のデフォルト動作と注意点の説明から、以下の内容はさまざまな git clean
の使用例とその動作に必要なコマンドラインオプションを示しています。 これは、実際に削除することなく、どのファイルが削除されるかを表示します。 常に最初に git clean
のドライランを実行することがベストプラクティスです。
$ git clean -n Would remove untracked_file
この出力は、git clean
コマンドが実行されると untracked_file
が削除されることを示しています。 この出力では、untracked_dir
が報告されていないことに注意してください。 デフォルトでは、git clean
はディレクトリに対して再帰的な操作を行わない。
-f or --force
force オプションは、現在のディレクトリから追跡されていないファイルを実際に削除することを開始する。 clean.requireForce
設定オプションが false に設定されていない限り、force は必須である。 これは、.gitignore
で指定された未追跡のフォルダやファイルを削除しません。
$ git clean -f Removing untracked_file
このコマンドは、削除されたファイルを出力します。 ここでは、untracked_file
が削除されていることがわかります。 ここで git status
を実行するか、ls
を実行すると、untracked_file
が削除され、どこにもないことがわかります。 デフォルトでは、git clean -f
はカレントディレクトリの追跡されていないすべてのファイルに対して動作する。
git clean -f -d include directories
-d
オプションは、追跡されていないディレクトリも削除することを git clean
に伝えるもので、デフォルトではディレクトリは無視されます。
$ git clean -dn Would remove untracked_dir/ $ git clean -df Removing untracked_dir/
ここで、-dn
の組み合わせを使用して「ドライラン」を実行し、untracked_dir
が削除対象であることを出力しました。
-x force removal of ignored files
一般的なソフトウェアリリースパターンは、リポジトリ追跡インデックスにコミットされていないビルドまたは配布ディレクトリを持つことです。 ビルドディレクトリには、コミットされたソースコードから生成された、一時的なビルドの成果物が含まれます。 このビルドディレクトリは通常、リポジトリの .gitignore
ファイルに追加されます。 このディレクトリを他の追跡されていないファイルと一緒に掃除すると便利なことがあります。 -x
オプションは、無視されたファイルも含めるように git clean
に指示します。 以前の git clean
と同様、最終的な削除の前に、まず「ドライラン」を実行するのがベストプラクティスである。 -x
オプションは、プロジェクトビルド固有のファイルだけでなく、すべての無視されるファイルに対して作用します。
git clean -xf
-d
オプションと同様に、-x
は他のオプションと組み合わせて使用することができます。 この例では、-f
との組み合わせで、カレントディレクトリから未追跡のファイルや、Git が通常無視するファイルを削除します。
インタラクティブモードまたは git clean interactive
これまで示してきたアドホックコマンドライン実行に加えて、git clean
には -i
オプションで開始できる「インタラクティブ」モードもあります。 このドキュメントの冒頭にあるサンプル・レポをもう一度見てみましょう。
$ git clean -di Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now>
私たちは -d
オプションで対話型セッションを開始したので、untracked_dir
にも作用することになります。 対話型モードでは、What now>
プロンプトが表示され、追跡されていないファイルに適用するコマンドを要求します。 コマンドそのものはかなり自明である。 コマンド6: help
から順番に簡単に見ていきましょう。
What now> 6 clean - start cleaning filter by pattern - exclude items from deletion select by numbers - select items to be deleted by numbers ask each - confirm each deletion (like "rm -i") quit - stop cleaning help - this screen ? - help for prompt selection
5: quit
単純で、対話型セッションを終了します。
1: clean
指定された項目を削除します。 この時点で1: clean
を実行すると、untracked_dir/ untracked_file
が削除されます。
4: ask each
は追跡されていない各ファイルを繰り返し、削除のためのY/N
プロンプトを表示します。
*** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 4 Remove untracked_dir/ ? N Remove untracked_file ? N
2: filter by pattern
追跡されていないファイルのリストをフィルターするために使用する入力を受け付ける追加のプロンプトを表示します。 対話型セッションでは、未追跡のファイル名に対応する数字を入力するよう求められます。
Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 3 1: untracked_dir/ 2: untracked_file Select items to delete>> 2 1: untracked_dir/ * 2: untracked_file Select items to delete>> Would remove the following item: untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
まとめ
要約すると、git clean
は、レポの作業ディレクトリ内の未追跡ファイルを削除する便利なメソッドです。 未追跡のファイルとは、レポのディレクトリにあるが、まだ git add
でレポのインデックスに追加されていないファイルのことです。 全体的な git clean
の効果は、git status
とオペレーティング システムのネイティブ削除ツールを使用して達成することができます。 Git clean
は git reset
と一緒に使用すると、リポジトリのすべての追加とコミットを完全に取り消すことができます。