web-dev-qa-db-ja.com

コミット後の.gitignore

Githubでホストされているgitリポジトリがあります。多くのファイルをコミットした後、.gitignoreを作成し、.exe.objファイルを除外する必要があることに気付きました。

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?それを強制する方法はありますか?

187
Madhur Ahuja

いいえ、.gitignoreに追加されたという理由だけで、リポジトリで既にコミットされているファイルを強制的に削除することはできません。

リポジトリに不要なファイルを削除するには、git rm --cachedする必要があります。 (--cachedは、おそらくローカルコピーを保持するが、リポジトリからは削除する必要があるためです。)したがって、リポジトリからすべてのexeを削除する場合は、

git rm --cached /\*.exe

(アスタリスク*がシェルから引用されていることに注意してください-これにより、シェルではなくgitがファイルとサブディレクトリのパス名を展開できます)

301
manojlds

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?

いいえ。既存の.gitignoreを使用しても、-f(強制)フラグを使用して「無視された」ファイルをステージングできます。ファイルがすでにコミットされている場合、それらは自動的に削除されません。

git rm --cached path/to/ignored.exe
32
KingCrunch

変更をまだプッシュしていない場合:

git rm -r --cached .
git add .
git commit -m 'clear git cache'
git Push
17
slal

.ideaフォルダーとターゲットフォルダーを削除する必要があり、すべてのコメントを読んだ後、これは私にとってうまくいきました:

git rm -r .idea
git rm -r target
git commit -m 'removed .idea folder'

そして、マスターにプッシュ

11
Emanuele

ただし、これらのコミットされたファイルはリポジトリから自動的に削除されますか?

番号。

これを行うための「最良の」レシピは、ここで書かれているようにgit filter-branchを使用することです:

Git-filter-branchのmanページには包括的な例が含まれています。

履歴を書き換えます。誤って追加されたファイルを含むリビジョンを公開した場合、これらのパブリックブランチのユーザーに問題が発生する可能性があります。通知するか、ファイルを削除する必要があるかどうかを考えてください。

タグがある場合は、--tag-name-filter catオプションにgit filter-branchオプションを常に使用してください。それは決して痛くないし、後でそれを必要とすることに気づいたときにあなたの頭痛を救います

5
sehe

ファイルを削除してコミットした後でも、それらのファイルは履歴に残ります。これらを削除するには、 BFG Repo-Cleaner の使用を検討してください。 git-filter-branchの代替です。

1
Ash