git filter-branch でディレクトリを残す ― 2017年07月20日 12時21分18秒
% git filter-branch --subdirectory-filter libs/libAAA
だと、libAAA 直下のファイルだけが残る。
Subversion 等にあったため、一旦、libs 以下のファイルを各ライブラリ毎の git レポジトリに分割したい。ところがこの形だと、後々にまた、二つのライブラリを統合するときに、 衝突が起きるので、libs/libAAA を libAAA のディレクトリを残したままにして、他の全てのファイルとディレクトリを消したい。
思考錯誤の後、以下の形に落ち着いた。
tree-filter はシェルコマンドを受け取るので、awk 等では文字のエスケープが若干厄介だが、この形だとほぼどのディレクトリ名でも定型で処理することが出来ている。
% cd libs
% git filter-branch --tree-filter \
'ls | nawk "\$0 !~ /^libAAA\$/" | xargs rm -rf' --prune-empty
前回。
最近のコメント