git filter-branch で特定のファイルだけを残す2018年01月31日 09時18分41秒

git filter-branch でディレクトリを残すではあるディレクトリに入っているファイルを消す方法を紹介した。

awk が間に入っているので、文字のエスケープに手間が掛かる。find で特定のファイル名を除外した方が楽な場合も多い。

% git filter-branch --tree-filter 'find * ! -name file_name.sh -type f | xargs rm' --prune-empty
もし複数のファイルを残したいのなら二重のエスケープが必要になる。
% git filter-branch --tree-filter 'find * ! -name "*.sh" -type f | xargs rm' --prune-empty

git はディレクトリの管理を行わない。そのため、上のコマンドで消すのは -type f を使って、ファイルのみとしている。

前回次回。