我应该使用SVN还是Git?

我正在开始一个新的分布式项目。 我应该使用SVN还是Git?为什么?


SVN是一个回购和许多客户。 Git是一个拥有大量客户端回购的回购商,每个回购商都有一位用户。 它被分散到人们可以在本地跟踪他们自己的编辑而无需将事情推送到外部服务器的地步。

SVN被设计为更加中心化,Git基于每个用户拥有自己的Git仓库,而这些仓库将更改推回到中央仓库。 出于这个原因,Git给个人更好的本地版本控制。

同时你可以选择TortoiseGit,GitExtensions(如果你在github上托管你的“中央”git-repository,他们自己的客户端 - 用于Windows的GitHub)。

如果你正在寻找摆脱SVN,你可能想要评估一下Bazaar。 它是具有这种分布式元素的下一代版本控制系统之一。 它不像POSIX那样依赖于git,所以有本地Windows版本,并且它有一些支持它的强大的开源品牌。

但是你可能甚至不需要这些功能。 查看分布式VCS的特性,优点和缺点。 如果您需要超过SVN优惠,请考虑一个。 如果你不这样做,你可能想要坚持SVN(当前)优秀的桌面集成。


我从来没有理解过这种“在Windows上不擅长”的概念; 我完全在Windows下开发,我从来没有任何问题与Git。

我肯定会推荐git over subversion; 它只是非常多才多艺,并且允许“颠覆式开发”以颠覆方式永远不可能实现的方式。 它几乎可以在任何可以想象的平台上使用,并且具有比您可能使用的更多功能。


这里是我从一些重复的问题中删除了关于Git与SVN(2009年9月)的答案的副本。

更好? 除了通常的链接WhyGitIsBetterThanX,它们是不同的:

一个是基于廉价的分支和标签拷贝的中央VCS另一个(Git)是基于修订图的分布式VCS。 另请参阅VCS的核心概念。


第一部分产生了一些错误的评论,假设这两个程序(SVN和Git)的基本目的是相同的,但是它们的实现方式有很大不同。
为了澄清SVN和Git之间的根本区别,让我换个说法:

  • SVN是版本控制的第三个实现:RCS,然后是CVS,最后是SVN管理版本化数据的目录。 SVN提供了VCS特性(标签和合并),但它的标签只是一个目录副本(就像一个分支,除非你不能“接触”标签目录中的任何东西),它的合并仍然很复杂,目前基于元添加数据以记住已经合并的内容。

  • Git是一个文件内容管理 (一种合并文件的工具), 演变成一个真正的版本控制系统 ,基于提交的DAG(有向无环图),其中分支是数据历史的一部分(而不是数据本身),标签是一个真正的元数据。

  • 要说他们不是“根本上”不同,因为你可以达到同样的目的,解决同样的问题,在很多层面上......是纯粹的错误。

  • 如果你有很多复杂的合并,用SVN做它们会更长,更容易出错。 如果你必须创建许多分支,你将需要管理它们并合并它们,再次使用Git比使用SVN更容易,特别是在涉及大量文件时(速度变得重要)
  • 如果您正在进行部分合并工作,那么您将利用Git临时区域(索引)仅提交您需要的内容,将其余部分隐藏起来,然后在另一个分支上继续。
  • 如果您需要脱机开发...以及Git,您总是可以通过自己的本地存储库“在线”,无论您希望使用其他存储库的工作流程如何。

  • 尽管如此,旧的(删除)答案的评论仍然坚持:

    VonC:你在实施方面的根本区别(差异是非常基本的,我们都明确同意这一点),目的不同。
    它们都是用于相同目的的工具:这就是为什么许多以前使用过SVN的团队已经成功地将它转储为Git。
    如果他们没有解决同样的问题,这种可替代性就不存在。

    ,我回答说:

    “可替代性”......有趣的术语(用于计算机编程)。
    当然,Git几乎不是SVN的子类型。

    你可以在两者上实现相同的技术特征(标签,分支,合并),但Git并不妨碍你的工作,并且让你专注于文件的内容 ,而不必考虑工具本身。

    你当然不能(总是)只用Git替换SVN,而不改变该程序的任何期望属性(正确性,任务执行,...)“(这是对前述可替换性定义的引用):

  • 一个是扩展版本工具,另一个是真正的版本控制系统。
  • 一个适用于具有简单合并工作流程和(不太多)并行版本的小型到中型整体项目。 SVN就足够了,你可能不需要所有的Git特性。
  • 另一个允许基于多个组件(每个组件一个回购)的大中型项目,在复杂合并工作流程中的多个分支之间合并大量文件,在分支中使用并行版本,改进合并等等。 你可以用SVN来完成,但你用Git更好。
    SVN根本无法用任何合并工作流管理任何规模的项目。 Git可以。
  • 再次, 它们的本质是根本不同的 (然后导致不同的实现,但这不是重点)。
    一个将修订控件看作目录和文件,另一个只能看到文件的内容(以至于空目录甚至不会在Git中注册!)。

    一般的最终目标可能是相同的,但不能以相同的方式使用它们,也不能解决同一类问题(范围或复杂度)。

    链接地址: http://www.djcxy.com/p/45719.html

    上一篇: Should I use SVN or Git?

    下一篇: Working copy XXX locked and cleanup failed in SVN