理系学生日記

おまえはいつまで学生気分なのか

対象ファイルやディレクトリがない時でも`git rm`を正常終了させたい

git rm -rをスクリプトに組み込む中で、「このディレクトリが存在するかはスクリプト実行時にしかわからない」というケースがありました。

git rmは対象のファイルやディレクトリがない場合、エラーを返却します。これは-fを付与した時も変わりません。

$ git rm hoge
fatal: pathspec 'hoge' did not match any files
$ git rm -rf hoge
fatal: pathspec 'hoge' did not match any files

どうしたものかと思いましたが、こういったケースでは--ignore-unmatchを使います。 このオプションを使うと、対象ファイルやディレクトリがあろうとなかろうとgitは正常終了します。

$ git help rm | grep -A1 'ignore-unmatch$'
       --ignore-unmatch
           Exit with a zero status even if no files matched.

実際に実行してみると、正常終了することがわかります。

$ git rm --ignore-unmatch hoge
$ echo $?
0