首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git历史图与SVN历史图的比较

Git历史图与SVN历史图的比较
EN

Stack Overflow用户
提问于 2014-10-08 14:19:11
回答 1查看 1.1K关注 0票数 1

我试图理解Git和SVN图之间的区别。我知道Git图是DAG

但在比较这两种情况时:

示例Git历史图:29acb2fe86d3e03e7f8c665c4225c454.jpg

示例SVN历史图:http://svn-graph-branches.googlecode.com/svn/wiki/nxt-python-r222.svg

我真的不知道如何运用这些知识--看起来和我很相似。

在此:

graphs.html

它说:第二代工具倾向于将存储库的历史建模为一行。

但是,这与上面的历史图SVN示例并不符合--所以SVN不是第二代工具,或者文章是错误的。有人能帮忙澄清上面的内容吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-08 20:27:39

区别在于,在SVN中,每个人都有相同的提交序列。在SVN中,一个完全最新的工作副本是一个定义的东西,它总是具有完全相同的节点顺序。

在Git中,存储库可以对另一个存储库完全“更新”,但是第三个存储库可能在共享历史的某个点之后有一组完全不同的节点集。

换句话说,如果我在SVN中创建版本5,并且前面的提交按时间顺序排列为版本4,那么项目中的每个人最终都必须看到相同的版本5。我知道第3版出现在版本4之前,没有人可能拥有我需要合并的版本5‘。在任何地方的每一份工作副本中,顺序总是3-4-5-5‘。

但是在Git或Mercurial这样的分布式工具中,如果我创建了397afeg815版本,而前面的版本按时间顺序是8290e7ab8f,这完全没有告诉我839 fall Def7可能会掉在哪里,而中国的某个人可能刚刚提交了版本9876543231abc,这个版本也恰好在8290e7ab8f之后。这里的树枝不是线性的,除了父子关系之外,没有定义的顺序.与SVN不同,在Git或Mercurial中,每个提交都有一个父级,最多只有一个子级(位于同一分支上),在同一个分支中,提交可以有多个父级和多个子级。

当SVN分支时,这是一个深思熟虑的选择,每个人都会在同一点上看到分支,并且毫无疑问哪一条开发路线是向前发展的主干。Git和Mercurial以及其他类似的系统可能会在每次提交时创建一个新的分支,而任何给定的提交是否在“主干”上完全取决于团队的开发过程,甚至取决于您询问的对象。

编辑作进一步澄清

真正的DAG (如Git或Mercurial )与“线性”历史(如SVN )之间的区别在于,您可以根据需要重新排列Git的DAG中的节点。你还会有同样的历史。事实上,根据您提取/提交/推送事物的顺序,您可能实际上在您自己的存储库中看到了DAG的几个不同的排列。节点的顺序并不重要,只有父-子关系。

SVN的历史不一样。只有一种方法可以查看SVN树。第2版总是跟随第1版,第3版总是跟随第2版。毫无疑问,对于“线性”历史来说,事情发生的顺序是什么?节点的顺序是不变的。在SVN的情况下,它甚至跨越了分支边界。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26259236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档