このセクションでは、git cleanコマンドの詳細な説明を中心に説明します。 Git clean はある程度「元に戻す」コマンドです。 Git cleangit resetgit checkout のような他のコマンドを補完するものと考えることができる。 これらのコマンドは Git のトラッキング・インデックスに追加されたファイルに対して操作するのに対し、git clean コマンドは未トラックのファイルに対して操作します。 未追跡のファイルとは、リポジトリの作業ディレクトリ内に作成されたものの、git add コマンドを使用してリポジトリの追跡インデックスにまだ追加されていないファイルのことです。 追跡済みファイルと未追跡ファイルの違いをよりよく示すために、次のコマンドラインの例を考えてみましょう。 そして、Git インデックスに追加される tracked_file を作成し、さらに untracked_fileuntracked_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 cleangit reset と一緒に使用すると、リポジトリのすべての追加とコミットを完全に取り消すことができます。

コメントを残す

メールアドレスが公開されることはありません。