2017-03-21 11 views
0

私は(ここではルート/パッケージ/ファイル)すぐに、ディレクトリの名前のパッケージ私のgitリポジトリの下や他のいくつかのサブフォルダ内の同じ名前を持つ別の(ルート/ directory1の持っています/パッケージ/ファイルはこちら)。私は、前者のすべてが削除され、後者がそのまま残っていることを確認したい。このコマンドは両方にマッチしますか?はいの場合、root/packages /すべてのファイルがgit rmの対象になっていることを確認するにはどうすればよいですか?gitのフィルタ分岐RMワイルドカード

git filter-branch --index-filter 'git rm --cached --ignore-unmatch packages/*' --prune-empty HEAD 

答えて

0

これは--index-filterない--tree-filterあるので、それはシェルからグロブ文字*を保護するために賢明です。 すなわち:例えば

git filter-branch \ 
    --index-filter 'git rm --cached --ignore-unmatch "packages/*"' \ 
    ... 

。 (--tree-filterでは、*は通常のように動作します)。*グロブ拡張はGitになります。これは、インデックスに格納されているpackages/というディレクトリ内の名前と一致します。

the git rm documentation notesとすると、これもディレクトリ名と一致します。 は、の不足のためにのディレクトリを削除しませんが、それでも一致します。そのようなディレクトリがない場合、これは問題ではありません。


filter-branchコマンドを実行するほとんどの設定でほとんどのシェルが残し巻き上げるように、一時ディレクトリ内の各フィルタ、*非拡大し、とにかく正しいことを行います。

--tree-filterを使用している場合、一時ディレクトリには、フィルタ処理されているツリーのコピーがあることに注意してください。それ以外の場合は空です。

+0

お返事ありがとうございます。 glob展開の詳細の答えとして受け入れる:)それは私が必要とするものとまったく同じです。 –