2.6 想吃后悔药
假如提交的数据中不小心包含了一个不应该检入的虚拟机文件——大约有1个GB!这时候,您会多么希望这个世界上有后悔药卖啊。
1.SVN的解决方案
SVN遇到这个问题该怎么办呢?删除错误加入的大文件后再提交,这样的操作是不能解决问题的。虽然表面上去掉了这个文件,但是它依然存在于历史中。
管理员可能是受影响最大的人,因为他要负责管理服务器的磁盘空间占用及版本库的备份。实际上这个问题也只有管理员才能解决,所以你必须向管理员坦白,让他帮你在服务器端彻底删除错误引入的大文件。我要告诉你的是,对于管理员,这并不是一个简单的活。
(1)如果SVN管理员没有历史备份,只能重新用svnadmin dump导出整个版本库。
(2)再用svndumpfilter命令过滤掉不应检入的大文件。
(3)然后用svnadmin load重建版本库。
上面的操作描述中省略了一些窍门,如果要把窍门讲清楚,这本书就不是讲Git,而是讲SVN了,故本书中不进行深入探讨。
2.Git的解决方案
如果你用Git,一切就会变得非常简单,而且你也不必去乞求管理员,因为使用Git,每个人都是管理员。
如果是最新的提交引入了不该提交的大文件:winxp.img,操作起来会非常简单,还是用修补提交命令。
$git rm—cached winxp.img
$git commit—amend
如果是历史版本,例如是在<commit-id>所标识的提交中引入的文件,则需要使用变基操作。
$git rebase-i<commit-id>^
执行交互式变基操作抛弃历史提交,版本库还不能立即瘦身,具体原因和解决方案请参见本书第2篇第14章中的内容。除了使用变基操作,Git还有更多的武器可以实现版本库的整理操作,具体请参见本书第6篇第35.4节的内容。