Git存储快照,而不是更改?

时间:2014-12-08 12:23:00

标签: git

这部分文件:

http://git-scm.com/book/en/v2/Getting-Started-Git-Basics

描述了git如何为每个提交存储完整文件系统/存储库的完整快照,而不是跟踪文件更改。

我理解这个概念,但想通过例子来理解它。因此,我创建了一个包含8个修订/签入的虚拟SVN存储库。

现在在SVN我做了一个“更新项目到修订版”。例如,修订版4:

enter image description here

我的本​​地svn存储库会自动更新到版本4的内容(删除/添加本地内容)

对我来说,这似乎就是在签出上一次提交时Git中发生的事情 - 从本地文件系统的角度来看。

在检查代码库的先前版本/修订版时,当涉及到磁盘上的文件更改方式时,我是否遗漏了某些内容或者Git和SVN的行为方式是否相同?

2 个答案:

答案 0 :(得分:2)

  

我的本​​地svn存储库会自动更新到版本4的内容(删除/添加本地内容)

     

对我来说,这似乎就是在签出上一次提交时Git中发生的事情 - 从本地文件系统的角度来看。

这是正确的,只是git的内部结构更简单,更有用。

  

当谈到文件在磁盘上的变化时,Git和SVN的行为方式不一样

同样正确:虽然任何人的工作树都关注git和svn有相同的基本工作,把任何版本的内容都告诉它关心工作树并接受新版本来关心,git's内部模型是它直接存储版本。每当用于压缩新内容以进行压缩的收益看起来令人满意时,它的对象访问层将在引擎盖下完成,但实际的内容跟踪和源代码控制永远不会看到它。

答案 1 :(得分:-1)

Git commit仅包含已更改/新文件。它也与先前的提交相关联。这就是所有其他文件的找到方式。

但是将来可以压缩旧对象以进行空间优化。