私は自分のリポジトリに無視されるべきファイルをいくつか持っています。それらを.gitignoreに追加しましたが、もちろん、それらは私のリポジトリから削除されません。
だから私の質問は、私の歴史を書き換えて簡単にこれらすべてのファイルを削除できるfilter-branchを使った魔法のコマンドやスクリプトがあるのでしょうか?または単にそれらを削除するコミットを作成するコマンドですか?
手動でそれらをリポジトリから削除することができます。
git rm --cached file1 file2 dir/file3
または、ファイルがたくさんある場合は、
git rm --cached `git ls-files -i --exclude-from=.gitignore`
しかし、これはWindows上のGit Bashではうまくいかないようです。エラーメッセージが表示されます。次の方がうまく機能します。
git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
これらのファイルを使わずに全履歴を書き換えることに関して、私は自動それをする方法があるかどうか疑わしいです。
そして、歴史を書き換えるのは悪いことを私たち全員が知っていますね。 :)
どのOSでも機能するもっと簡単な方法は
git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"
あなたは基本的に、.gitignoreのファイルを除いて、すべてのファイルを読みました。
。gitignore内のファイルは追跡されていないので、git cleanコマンドを使用して、バージョン管理下にないファイルを再帰的に削除することができます。
ドライランを実行し、何が削除されるかを確認するには、git clean -xdn
を使用します。
それからgit clean -xdf
を使って実行します。
基本的にgit clean -h
またはman git-clean
(unixの場合)が役に立ちます。
このコマンドでステージング領域にない新しいファイルも削除されることに注意してください。
それが役に立てば幸い。
Sedを使って.gitignoreステートメントの出力を操作することで、非常に簡単な解決策を得ました。
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
説明: