2017-03-20 4 views
0

私はいくつかの既存のリポジトリを1つに移動/マージしています(これらはすべて同じモノリシックアプリケーションを構築するために使用されています)。それらの中にはいくつかのプロジェクトがあり、リポジトリ全体から1つのディレクトリだけが必要です。gitを無効にするpathspec - 1つのディレクトリを除くすべてのファイルに一致する

git rm私はSomeSampleDirectory以外のすべてのファイルを削除するpathspec構文(repo履歴を書き換えるため)を探しています。だから、

、基本的に、の否定:

ls | grep -v SomeSampleDirectory | xargs git rm --cached -f 

lsコンテンツとして、--index-filterでは動作しません:私が正しく理解していれば、あなたはの線に沿っていろいろ書いが

git filter-branch -f 
    --prune-empty 
    --index-filter 
    "git rm --cached -f --ignore-unmatch SomeSampleDirectory/*" 
    --tag-name-filter cat -- --all 

答えて

1

が必要ディスク上にはありません。アクティブレポのルートディレクトリにコミットのためのファイル/ディレクトリのフラットなリストを表示するには、

一つの方法は次のとおりです。

$ git show HEAD^{tree} 
tree HEAD^{tree} 

.gitattributes 
.gitignore 
.mailmap 
    ... 

あなたはtail -n +3

と出力の2本の引き出し線をドロップすることができます

だから、使用して「SomeSampleDirectory以外のすべてを」ドロップすることができますコマンドとして

git show HEAD^{tree} | tail -n +3 | grep -v SomeSampleDirectory | 
    xargs git rm --cached -f 

を各コミット時に適用します。


注:obsviously、何らかの理由で、あなたはまた、いくつかの他のファイル(.gitattributes.gitignore、...)あなたが道に沿っていくつかの余分なgrep -v foobarを追加することができますを維持する必要がある場合。

関連する問題