软件构造实验五测试大文件读入的时候,log就存了巨多……导致某次提交的时候,log文件超过了100M,然后令人悲伤的故事就发生了(
由于我的log文件是从第一次提交就存在的,所以只是删除文件再提交是没有用的,翻了翻博客发现有个比较可行的解决方案,但是博客的情况跟我又有些不同,所以我就又默默地把插件的文档看了看。解决之后就想反正文档都看了不如写成博客供我以后万一再出事故的不时之需(大雾
首先到这个网址:https://rtyley.github.io/bfg-repo-cleaner/#download
下一个叫做BFG的插件,对linux来说不用安装就能在命令行调用 (window大概应该是双击运行?)
这个插件的作用是可以帮你在commit记录里删掉你想要删掉的文件的记录,而我们需要把本地和远程库的关于这个超过100M的大文件从头到位的commit记录都删除掉,这样才能继续上传成功。
首先我们删除本地的大文件debug.log的commit记录:
- 首先cd进BFG文件所在的目录
- 然后用命令删除文件,如果你的文件之前就非常大,那么可以用下面的命令一键删除所有大文件:
$ java -jar bfg.jar --no-blob-protection --strip-blobs-bigger-than 50M ffffatgoose.git
当然你要首先确保自己安装了java(这显然大概率是句废话
其次,50M
指的是删除50M大小以上的文件,如有需要可以自己修改;ffffatgoose.git
是你要删除的git库文件路径;bfg.jar
是你下载的bfg文件的名字,一般后面都带有版本好,所以需要自己适当修改(
如果你和我一样,悲惨地发现想要删除的文件在前几次提交的时候还是十分的渺小,那么如果想要一股脑把关于这个文件的记录全删掉,就要用到下面的命令:
$ java -jar bfg.jar --no-blob-protection --delete-files id_{dsa,rsa} ffffatgoose.git
这个命令会删除所有名为’id_rsa’或者’id_dsa’的文件,其中id_{dsa,rsa}
是你想要删除的文件名称,其他关键词同上个命令。
接下来的我们的任务就是删除远程库中的commit记录,步骤来自官方文档(
- 首先我们先在本地克隆一个你的远程仓库:
$ git clone --mirror git://example.com/some-big-repo.git
这是一个含有你所有git commit数据的库,它并没有像git clone
命令一样把你所有git库中的文件都下载下来。也就是说,为了以防万一误删除什么,建议先给你的远程库备份( - 接下来我们就可以开始愉快而爽快地删东西啦(什么鬼
$ java -jar bfg.jar --strip-blobs-bigger-than 100M ffffatgoosefaraway.git
$ java -jar bfg.jar --delete-files id_{dsa,rsa} fffatgoosefaraway.git
根据自己的需要选取命令即可,命令关键词同上,如果删除成功应该有这样的信息的:
- 然后你需要进到刚刚下载的git库中去瞅一眼(当然不只是瞅一眼啊喂
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
BFG只是用来修改你的commit记录的,也就是说它只会更新你的commits和分支tags,并不会删除所有的数据或者其他一些什么不需要的东西,所以我们要用上面两个命令来使得git工作区变得干净一些 - 然后没了,推到远程库就完工了(
$ git push
之后转到你的本地仓库,再往远程推文件的话可能会遭遇远程库比本地领先一个版本的错误,emmmmm其实强行推上去就行:(这是在本地原来的git库)
$ git push -u origin +master
然后就完工啦
是不是还挺简单易行的(并不
综上所述,我觉得吧,每次向远程仓库推送的时候,瞅一眼log大小是一个好习惯(