我已经使用 Git 一段时间了,并且喜欢它所允许的工作流程中的功能和灵 active 。尽早并经常做出 promise 的能力对我来说意义重大,而且非常适合我的工作方式。
我曾多次听到 Git 的一个功能,但我还没有真正理解它,它跟踪内容而不是文件历史记录,这应该可以更好地处理重命名和移动文件。
谁能解释一下这是为什么?与 SVN 相比,我没有注意到这方面有什么特别之处。我错过了什么?
最佳答案
Git 存储 three pieces of data separately :
- 内容存储在 blob 对象中
- 历史存储在提交对象中
- 结构存储在树对象中
这样做的结果是,如果您在多个文件中有相同的数据,git 只需存储一次,因为结构(包含目录和文件)只需指向一个内容对象。
类似地,如果一个文件在不同版本之间没有变化,git 只需存储该文件一次。多个历史对象指向相同的内容。
一些用户可见的好处是 git blame is very good at seeing code move across files特别是如果你用 git blame -C
告诉它看起来真的很难。这也是 git 如此紧凑和快速的部分原因,结构非常简单,走起来非常便宜并且不会重复。
缺点之一是 git 不存储文件副本和重命名,它只是猜测,有时它是错误的。
This blog entry提供了一个很好理解但仍然详细的讨论内容跟踪购买 git 的内容。想了解更多可以watch Linus' Google Tech Talk on Git或 read the transcript .
关于svn - 有人可以解释一下 Git 中使用的内容跟踪和其他 SCM 中使用的文件跟踪之间的区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604232/