2012-03-12 8 views
2

私はgit filter-branchでこれを可能にすることができますが、--subdirectory-filterを使用する必要があるかどうか、インデックスフィルタを使用する必要があります。git filter-branchを使ってすべてのファイルをサブディレクトリに移動する

しかし、私はレポと呼ばれるリポジトリを持って、そして構造のようなものに見えるのは、言わせて:

私がやりたいことは、結果があるので、DIR2というディレクトリへのすべてを移動している
repo/fileA 
repo/fileB 
repo/dir1/fileC 

repo/dir2/fileA 
repo/dir2/fileB 
repo/dir2/dir1/fileC 

私はfilter-branchを使用して、このリポジトリの誕生以来のようにしたいと考えています。すべては常にdir2で行われました。これを行うには、サブディレクトリファイルまたはインデックスフィルタを使用する方が適切ですか?

答えて

2

ツリーフィルタ。以下のようなものが動作するはずです:

git filter-branch --tree-filter 'test -e fileA && mkdir dir2 && mkdir dir2/dir1 && mv fileA fileB dir2/ && mv dir1/fileC dir2/dir1/ || echo "no op"' HEAD 

しかし、これはFILEA、FILEBとFILECが同時に追加されたことを前提として(私たちはFILEAのためのテスト-eを使用しているため)とそうではないかもしれません。そうでない場合は、ファイルごとにいくつかの掃引を行う必要があります。

1

おそらくツリーフィルターです。

  • サブディレクトリフィルタは、(既存のディレクトリをリポジトリのルートに移動し、残りの部分は無視する)ように設計されています。
  • インデックスフィルタはインデックスを変更せずにインデックスを変更するように設計されていますが、git mvにはインデックスのみを処理するオプションがありませんので、実際にはチェックアウトが必要です。
関連する問題