Maintenance
Git可以通过自动垃圾回收的方式,有效的利用存储空间,一般.git/objects/目录下的对象是以松散的方式存放的,但当这些松散对象的个数超过7000时,git会自动进行压缩,形成pack文件,当pack文件多于50个时,Git回把多个pack文件压缩成为一个pack文件
此外,垃圾回收的功能还会对.git/refs/中的内容进行压缩,存入.git/packed-refs文件中。
也可以手动运行Git的垃圾回收功能:git gc (gc表示garbage collection)
还可以设置自动垃圾回收:git gc --auto,至于触发回收动作的条件可以通过配置gc.auto各gc.autopacklimit来进行设定
DataRecovery
当你不小心失支了对某些commit对象的引用时,可以尝试的恢复办法有:
查看reflog日志:git reflog 或 git log -g ,并重新建立分枝索引
当reflog 也不可用时,可以使用:git fsck --full 对git仓库的文件系统进行完整性检查,列出那些没有被引用过的对象,从而重新获得它们
reflog记录每一次HEAD改变时的值,提交或改变分枝时,reflog都会更新
RemoveObject
这一节太难了,原书510页,用的时候就重看吧。
记几句主要的命令来作一个思维串引:
git rm <to-be-deleted-file-name>从仓库中删除文件
git count-objects -v显示仓库中对象的统计信息
git verify-pack <packfilename>查看打包文件的内容
git rev-list
git filter-branch
git prune --expire now删除仓库中过期的对象