svn - 有人可以解释一下 Git 中使用的内容跟踪和其他 SCM 中使用的文件跟踪之间的区别吗

标签 svn git

我已经使用 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 Gitread the transcript .

关于svn - 有人可以解释一下 Git 中使用的内容跟踪和其他 SCM 中使用的文件跟踪之间的区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5604232/

相关文章:

svn - SharpSVN:递归删除 "missing"文件?

Git 扩展 - 如何将 master merge 到分支

git - 备份 git 服务器以进行灾难管理阶段

git - 如何在不需要强制推送的情况下使用 git rebase?

svn - 相当于 "svn -v status"的 git

git - 事件分支数量的最佳范围是多少?

visual-studio - VisualSVN - 禁用自动结账

c# - 以编程方式调用已安装版本的 TortoiseSVN 使用的 SVN 库

git - Github 或任何其他基于云的存储库服务(Gitlab、Bitbucket)如何存储源代码文件和目录?

git - "git checkout -- *"返回 "error: pathspec did not match any files known to git"