7

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

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

我怎样才能让 git 完全忘记跟踪venv并将我的.git文件夹再次缩小到合理的大小,因为这让 Heroku 成为了一场噩梦。

4

5 回答 5

15

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

git rm --cached venv*

Rich Stone 在下面提到,如果venv是文件夹,则应使用递归开关,-r

git rm --cached -r venv*
于 2013-01-18T23:37:04.203 回答
1

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

从 git 历史中永久删除大文件需要重写历史,这是一个有点痛苦的操作。特别是,它会中断来自具有“旧”历史版本的其他存储库的推送和拉取。但这是可以完成的; 有关详细信息,请参见例如这个问题这个问题。

于 2013-01-18T23:39:16.863 回答
1

试试看git gc,根据手册,这会触发自动垃圾收集。如果这没有帮助,请在此处发表评论,我会为您调查更多选项。

于 2013-01-18T23:35:48.420 回答
1

请参阅此线程:如何使 Git “忘记”已跟踪但现在位于 .gitignore 中的文件?

从当前提交中删除文件很容易,但是从历史记录中完全删除它们以减小文件大小是一团糟,请参阅如何从 Git 存储库中的提交历史记录中删除/删除大文件?https://help.github.com/articles/remove-sensitive-data

将您的最新代码导出到新的 git 存储库并重新开始并保留旧代码存档可能会更快。

于 2013-01-18T23:44:33.037 回答
1

放入文件.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从所有提交中删除。请记住,您将需要执行 a git push -f,因为您更改了历史记录。

于 2013-01-19T01:13:25.267 回答