git在添加到.gitignore后是否从版本控制中删除文件?

时间:2013-01-18 23:27:48

标签: git

我在我的所有git commit和push活动中意外地包含了我的Python虚拟环境目录venv

我刚刚将venv添加到.gitignore。但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv)。

我怎样才能让git完全忘记跟踪venv并让我的.git文件夹再次降低到合理的大小,因为这会让Heroku发动噩梦。

5 个答案:

答案 0 :(得分:5)

尝试从git存储库中删除文件:

git rm --cached venv*

答案 1 :(得分:1)

尝试git gc,根据manual触发自动垃圾回收。如果这没有用,请在此处发表评论,我会为您调查更多选项。

答案 2 :(得分:1)

请参阅此主题:How to make Git "forget" about a file that was tracked but is now in .gitignore?

很容易将文件从当前提交中删除,但完全从历史记录中删除它们以降低文件大小是个混乱,请参阅How to remove/delete a large file from commit history in Git repository?https://help.github.com/articles/remove-sensitive-data

将新的代码导出到新的git repo并重新开始并保留旧代码以进行存档可能会更快。

答案 3 :(得分:0)

不,它没有。 .gitignore仅确保不会意外添加被忽略的文件,但它不会从历史记录中删除它们,也不会从HEAD中删除它们,如果已经添加它们,也不会从索引中删除它们。

要从git历史记录中永久删除大文件,需要进行历史记录重写,这是一个有点痛苦的操作。特别是,它打破了具有历史“旧”版本的其他存储库的推送和拉取。但这是可以完成的;见例如this questionthis one了解详情。

答案 4 :(得分:0)

将文件放入.gitignore不会从存储库中删除该文件。

您需要使用git filter-brach从存储库中完全删除文件或目录。为此,请使用以下命令:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch file/or/dir/with/complete/path' --prune-empty --all

通过这种方式,您将更改存储库历史记录以完成从所有提交中删除file/or/dir/with/complete/path。请记住,您需要执行git push -f,因为您更改了历史记录。