git filter-branch でディレクトリを残す2017年07月20日 12時21分18秒

filter-branch --subdirectory-filter を使うと、指定したディレクトリの下のみを残す。例えば、libs ディレクトリがあって、libAAA のディレクトリ構造を残したままには出来ない。
% git filter-branch --subdirectory-filter libs/libAAA
だと、libAAA 直下のファイルだけが残る。

Subversion 等にあったため、一旦、libs 以下のファイルを各ライブラリ毎の git レポジトリに分割したい。ところがこの形だと、後々にまた、二つのライブラリを統合するときに、 衝突が起きるので、libs/libAAA を libAAA のディレクトリを残したままにして、他の全てのファイルとディレクトリを消したい。

思考錯誤の後、以下の形に落ち着いた。

% cd libs
% git filter-branch --tree-filter \
  'ls | nawk "\$0 !~ /^libAAA\$/" | xargs rm -rf' --prune-empty
tree-filter はシェルコマンドを受け取るので、awk 等では文字のエスケープが若干厄介だが、この形だとほぼどのディレクトリ名でも定型で処理することが出来ている。

前回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2017/07/20/8624107/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。