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

12

我不小心把Python虚拟环境目录venv包含在我的所有git提交和推送活动中。

我刚刚将venv添加到了.gitignore文件中。但我的.git文件夹仍然非常大(我认为是因为之前的提交和跟踪记录了venv)。

我该如何让git完全忘记跟踪venv,并使我的.git文件夹重新变得合理,因为这让Heroku的推送变得困难。

5个回答

20

尝试从您的Git存储库中删除文件:

git rm --cached venv*

Rich Stone提到,如果venv是一个文件夹,你应该使用递归开关-r

git rm --cached -r venv*

这个问题解决后,我进行了提交和推送!谢谢! - stormfield
1
在 Mac 上,我需要执行 git rm --cached -r venv* 以递归删除。 - Rich Steinmetz

1
尝试运行git gc命令,根据手册,这会触发自动垃圾回收。如果这不起作用,请在此处留言,我将为您进一步调查其他选项。

1
不,它并不会。`.gitignore` 只是确保被忽略的文件不会被意外添加,但它并不会从历史记录、HEAD 或者索引中删除它们,即使它们已经被添加过了。
要永久删除 Git 历史记录中的大文件需要进行历史重写,这是一个有点痛苦的操作。特别是,它会破坏其他仓库中具有“旧”版本历史记录的推送和拉取。但是它是可以完成的;请参见例如 this questionthis one 以获取详细信息。

1

1
将文件放入.gitignore中并不会从存储库中删除该文件。
您需要使用git filter-branch来完全从存储库中删除文件或目录。要执行此操作,请使用以下命令:
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,因为您更改了历史记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接