清理Git历史记录

3
在我的一个项目中(已经提交到git存储库),我添加了一个巨大的目录(15000个文件,3GB)。当我意识到这是错误的时候,我删除了它,但似乎它仍然存在于历史记录中。这样做会使得项目克隆变成一个非常漫长的任务。一旦项目被克隆,.git目录约为4GB,但实际项目大小只有15MB。我的问题是:如何调整历史记录,以确保删除了那个3GB的目录?或者是否有其他方法来减小整个项目下载大小并加快克隆过程的速度?

仅澄清一下:这个3GB的文件已经在代码库里有一段时间了,对吗?如果它不是最近提交的,或者其他人已经拉取了大文件之后的提交,处理方式会有所不同。 - Kevin Reid
该目录存在了大约一个月。我在另一个月前删除了它。可能有一些文件被更改了。该项目只有两个开发人员。 - Dan D.
1
可能是从Git仓库完全删除文件的重复问题。 - ralphtheninja
2个回答

4

您想要知道哪个提交引入了巨大的目录。假设是在修订版本AAAAAAA中完成的。

为了摆脱该提交,仅删除目录(使用提交BBBBBBB)并重新检入不足够:提交AAAAAAA仍然存在,仍会使您的存储库大小增加。

为了消除提交,我们需要使用git rebase。打开您的git控制台,并输入:

git rebase -i AAAAAAA~1

这将打开一个编辑器,在第一行中包含提交AAAAAAA。删除此行(即当Vim是您的编辑器时,按下dd),然后再次提交您删除目录的提交(BBBBBBB),保存文件并退出(:wqa)。

之后,重新贴基开始,完成后,AAAAAAABBBBBBB将不再存在。确实如此。

您现在还可以使用git gc触发一些清理工作,并在其运行时喝杯咖啡。


请参阅此答案:git push heroku - stop heroku pushing/uploading massive file


谢谢你的回答。这个计划对我来说似乎不错,但实际上我更喜欢创建一个新的代码库,将代码复制到那里并从头开始。这对我来说更容易,至少我完全理解了整个过程 :) - Dan D.
“-i”和“~1”是什么意思? - qed
1
@qed:-i 表示交互式(请参阅 rebase 的文档),而 ~1 表示向后 1 个修订版本(https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html)。 - eckes

1

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