git 使用 git add 暂存了一个 未追踪 的文件后,会在git的对象库中存储该blob,
此步骤可一通过 git hash-object [filename] ; find .git/object ;和git add [filename]进行验证,
我已经验证过了,
然后我做的是git reset HEAD 将索引重置到以前的状态,这个文件的blob依然在对象库中,
然后我删除了该文件,因为该文件重新变为 未追踪 文件,所以直接rm 掉就是该版本库为察觉到任何变化
但是那个文件的blob还在对象库中,没有其他情况的话,应该没有任何东西会引用它,这不就成为一个垃圾了吗?
我知道git的设计思想就是disk is cheap。
我只是不想有完全没用的垃圾存在。
是我理解错了吗?
还是说git会有一种清理这种垃圾的机制?
离线
垃圾当然是先让它在那里,积累多了一次性倒掉啦。看看 git gc 相关命令的文档吧 :-)
PS: git 从来没觉得 disk is cheap 吧。不然它怎么还压缩、打包什么的。只是它觉得效率更重要,所以允许相当数量的松散文件存在。
离线
好吧,谢谢依云大神,我学习git才刚刚开始,想到这个就来问一问,
我对git压缩和打包的理解是:传输上效率的提升。
我觉得从每个人都拥有一份完整的仓库这一点来看就体现了git认为磁盘空间是很廉价的吧。
但是这样的确解决很多其他vcs的问题。
我再去看看 gc的文档哈,,再次感谢
垃圾当然是先让它在那里,积累多了一次性倒掉啦。看看 git gc 相关命令的文档吧 :-)
PS: git 从来没觉得 disk is cheap 吧。不然它怎么还压缩、打包什么的。只是它觉得效率更重要,所以允许相当数量的松散文件存在。
离线
你知道吗,对于许多仓库,git 所占用的空间比 svn 要小,虽然 git 保存了完整的历史而 svn 只有当前版本。
每个人都是完整的仓库是分布式的前提。
离线
我没有使用过svn,git是我接触版本控制以后学习的第一个cvs...
我也了解git这样做带来的好处。
你知道吗,对于许多仓库,git 所占用的空间比 svn 要小,虽然 git 保存了完整的历史而 svn 只有当前版本。
每个人都是完整的仓库是分布式的前提。
离线
你用git for windows 的gui的时候, 打开一个库,经常就是提示你,压缩清理。做完之后就清爽了
最近编辑记录 atmouse (2015-07-16 22:09:06)
离线
好吧,现在没用windows了,一直是linux环境,
依云大哥说的git gc 就是清理这种垃圾的命令。
你用git for windows 的gui的时候, 打开一个库,经常就是提示你,压缩清理。做完之后就清爽了
离线