我在我的所有git commit和push活动中意外地包含了我的Python虚拟环境目录venv
。
我刚刚将venv
添加到.gitignore
。但我的.git文件夹仍然很大(我假设因为之前的提交和跟踪venv)。
我怎样才能让git完全忘记跟踪venv
并让我的.git
文件夹再次降低到合理的大小,因为这会让Heroku发动噩梦。
答案 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 question或this 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
,因为您更改了历史记录。