git 或 svn 恢复文件原理

本地删掉一个文件之后,可以通过版本管理工具马上恢复。
我觉得要实现这个功能,需要至少将源文件拷贝一份,记录增量修改。
但是实际上发现 .git 和 .svn 目录并没有特别大,为什么?

阅读 5k
5 个回答

记录修改内容,保存最新版本

只是记录修改的地方吧,并不是备份文件

git和svn只不过是一种版本控制器,.git或者.svn只是记录了你的操作记录,你本地删除文件并没有把线上删除掉,所以还可以恢复。

Git 不是增量备份,而是的的确确归档了每个文件。你觉得不是特别大是因为代码文件本来就不大,就算所有文件完全拷贝一份也就是x2,而在实际项目中不可能每个文件都能轮到修改。

git会将文件内容经过加密压缩放到.git文件夹中,需要恢复的时候再通过SHA1值获得指定的内容,具体你可以参考我用node.js实现的git的几个功能:gito

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进