2016-06-13 25 views
0

これは非常に珍しい使用例ですが、git repoからすべての追跡されたファイルを削除したいと思います。はい、追跡されたファイルで、追跡されていないファイルではありません。gitは追跡されたファイルのみを消去します

私はコード生成ファイルの大きなセットを持っていますが、それらのいくつかはバイナリファイルのいくつかのテキストファイルです。私は、テキスト生成ファイルの履歴を追跡できるようにしたいと思います。私はリストセットを無視するなどの問題があります。次回に生成プロセスを実行すると、必要なファイルが変更され、新しいファイルが追加されますが、それ以上生成されない古いファイルは削除されません。作業ツリー全体を削除することはできますが、既に存在するバイナリやその他のファイルも削除されますので、やりたくありません。

gitを使用してクリーニングするオプションがある場合は、既に用意されている複雑な.gitignoreファイルを使用してファイルを区別するのが最良ですが、ドキュメントには何も表示されません。

追跡されているすべてのファイルを作業ツリーから削除する方法が厄介であるかどうかはありませんか?

答えて

1

あなたはmasterブランチのバージョン管理下にあるすべてのファイルを削除したい場合は、試みることができる:

git ls-tree -r -z master --name-only | xargs -0 git rm 

コマンドの最初の部分のパイプを再帰的にバージョン管理されmaster内のすべてのファイルを見つける前に、 git rmはリモートリポジトリからそれぞれを削除します。

git rm <file>は、ファイルをリモートリポジトリからトラッキングするのを削除します。

+1

私はあなたがここで 'GitのLS-tree'のオプションで' -z'を望んでいたと考えています。 'HEAD'を使って現在のコミットを参照してください。現在のインデックスを扱うには 'git ls-files'を使います。 – torek

+0

バージョン管理ですでに追跡可能なすべてのファイルを削除したいのですが、これは役に立ちます – gsf

+0

確かにテストしていました – gsf

0

あなたは作業ツリーのアップデートで、空のツリーをマージすることができます

git read-tree -m -u $(git mktree < /dev/null) 
+0

'git mktree'を実行する必要はありません。空のツリーは常にすべてのリポジトリに含まれます](http://stackoverflow.com/questions/9765453/is-gits-semi-secret-empty-tree-object-reliable-and-why-is-there-not-a -シンボリック)。私は 'git hash-object -w -t tree torek

+0

...もちろん、あなたの答えから 'git mktree':' hash = $(git mktree torek

+0

@torek私はあなたの提案で私の答えを更新します。 – PetSerAl

関連する問題