いくつかのファイルがあります。たとえば、ファイルにerror_log
追加される前に誤って git に追加された可能性があるため、この名前のファイルのすべてのインスタンスをGit リポジトリから.gitignore
削除するにはどうすればよいでしょうか?
サーバーに残しておきたいので、--cached
オプションを使用することに注意してください。
find -name "error_log" | xargs git rm --cached
トリックを行う必要があります
cd git プロジェクト ファイル
私を読んでいる間。git rm --cached $PWD/$i を実行します。完了 < .gitignore
次にコミットします
これにより、現在のコミットからそれらのファイルを削除します。
履歴から削除したい場合は、さらに多くのことを行う必要があります。したがって、それを行う必要がある場合は、以下にコメントしてください。
あなたが言った:
いくつかのファイルがあります。たとえば、1 つは error_log で、これらのいくつかは.gitignoreファイルに追加される前に誤ってgit に追加された可能性があります ...
スクリプトが行うことは、.gitignore ファイルを 1 行ずつ読み取るため、スクリプトは while ループを実行します。
$i は行です
$PWD は現在のディレクトリのパスです
したがって、 $PWD/$i は .gitignore ファイルの各行にあるファイルのパスです。
.gitignore の各行に対して git rm --cached $PWD/$i を実行します。
ファイル $PWD/$i が git に追加されていない場合 (つまり、ファイルが自分の error_logs のいずれでもない場合)、害はありません。それが error_logs の 1 つである場合は、そのファイルをキャッシュから削除します。
最初に .gitignore にファイルを追加してから、スクリプトを実行してください。
filter-branch
コミット履歴 (すべてのコミット) から完全に消去するために使用する必要があります。
git filter-branch --index-filter --prune-empty "find . -name error_log | xargs --no-run-if-empty git rm --cached --ignore-unmatch"
(こちらの解決策 5またはGitHub の機密データの削除)
ノート!この方法では、「error_log」の古いリビジョンがすべて失われます。最後の状態のファイルのみが利用可能になります。ファイルをレポから除外して将来追跡しないようにする場合は、 @ blue112 の回答を使用してください