我正在开始一个新的分布式项目。我应该使用SVN还是Git,为什么?
答案 0 :(得分:253)
SVN是一个回购和很多客户。 Git是一个拥有大量客户回购的回购,每个回购都有一个用户。它被分散到人们可以在本地跟踪自己的编辑而无需将内容推送到外部服务器的程度。
SVN被设计为更加重要的地方,Git基于每个用户拥有自己的Git仓库,并且那些repos推送更改备份到中央。出于这个原因,Git为个人提供了更好的本地版本控制。
与此同时,您可以选择TortoiseGit,GitExtensions(如果您在github上托管“中央”git-repository,则可以选择client – GitHub for Windows)。
如果你想要退出SVN,你可能想要评估一下Bazaar。它是具有此分布式元素的下一代版本控制系统之一。它不依赖于POSIX,因此有本机Windows版本,它有一些强大的开源品牌支持它。
但你可能还不需要这些功能。看看the features, advantages and disadvantages of the distributed VCSes。如果您需要的不仅仅是SVN优惠,请考虑一个。如果不这样做,您可能希望坚持使用SVN(当前)卓越的桌面集成。
答案 1 :(得分:110)
我从来不理解“git在Windows上不好”的概念;我只在Windows下开发,我从来没有遇到任何git问题。
我肯定会推荐git over subversion;它的功能多得多,并且允许“颠覆式开发”以颠覆从未真正实现过的方式。它几乎可以在任何可以想象的平台上使用,并且具有比您可能使用的功能更多的功能。
答案 2 :(得分:77)
以下是我对some duplicate question since then deleted关于Git与SVN(2009年9月)的回答。
更好?除了通常的链接WhyGitIsBetterThanX之外,它们是不同的:
一个是基于分支和标签的廉价副本的中央VCS 另一个(Git)是基于修订图的分布式VCS。 另请参阅Core concepts of VCS。
第一部分产生了一些错误的评论,假装这两个程序(SVN和Git)的基本目的是相同的,但它们的执行方式完全不同。
为了澄清fundamental difference between SVN and Git,让我重新说一下:
SVN是revision control:RCS, then CVS and finally SVN管理版本化数据目录的第三个实现。 SVN提供了VCS功能(标签和合并),但它的标签只是一个目录副本(就像一个分支,除了你“不应该”触摸标签目录中的任何东西),它的合并仍然很复杂,目前基于meta -data添加以记住已经合并的内容。
Git是文件内容管理(用于合并文件的工具),演变为真正的版本控制系统,基于DAG({{ 3}})提交,其中分支是数据历史的一部分(而不是数据本身),标签是真正的元数据。
要说它们不是“根本上”不同,因为你可以达到同样的目的,解决同样的问题,在很多层面都是......显而易见的错误。
仍旧对旧(已删除)答案的评论仍然存在:
VonC:你在实施方面的根本差异(差异是非常基本的,我们都明确同意这一点)与目的上的差异混淆了。
它们都是用于同一目的的工具:这就是为什么许多以前使用过SVN的团队已经成功地将它转储为Git。
如果他们没有解决同样的问题,那么可替代性将不存在。
,我回复说:
“替代性”......有趣的术语(Directed Acyclic Graph) 当然,Git几乎不是SVN的子类型。
您可以使用两者获得相同的技术功能(标记,分支,合并),但Git不会妨碍您使用让您专注于文件的内容,而无需考虑工具本身。
你肯定不能(总是)只用Git替换SVN“而不改变该程序的任何理想属性(正确性,执行任务,......)”(这是对上述used in computer programming的引用) :
同样,他们的性质根本不同(然后导致不同的实施,但这不是重点)。
一个看到版本控制作为目录和文件,另一个只看到文件的内容(以至于空目录甚至不会在Git中注册!)。
一般的最终目标可能是相同的,但你不能以相同的方式使用它们,也不能解决同一类问题(范围或复杂性)。
答案 3 :(得分:37)
SVN的两个主要优点很少被引用:
大文件支持。除了代码,我使用SVN来管理我的主目录。 SVN是唯一没有阻塞我的TrueCrypt文件的VCS(分布式或非分布式)(如果有另一个VCS可以有效处理500MB +文件,请纠正我)。这是因为差异比较是流式传输的(这是非常重要的一点)。 Rsync是不可接受的,因为它不是双向的。
部分存储库(subdir)结帐/签入。 Mercurial和bzr不支持这一点,而且git的支持是有限的。这在团队环境中很糟糕,但如果我想从我家里的另一台计算机上查看一些东西,这是非常宝贵的。
只是我的经历。
答案 4 :(得分:24)
在做了更多研究并审核此链接后:https://git.wiki.kernel.org/articles/g/i/t/GitSvnComparison_cb82.html
(下面的一些摘录):
阅读完所有这些后,我确信Git是可行的方法(虽然存在一点点学习曲线)。我也在Windows平台上使用过Git和SVN。
在阅读上述内容之后,我想听听别人的意见吗?
答案 5 :(得分:11)
我会建立一个Subversion存储库。通过这种方式,各个开发人员可以选择是使用Subversion客户端还是Git客户端(使用git-svn
)。使用git-svn
并不能为您提供所有完整Git解决方案的好处,但它确实为各个开发人员提供了对其工作流程的大量控制。
我相信Git在Windows上的运行时间与在Unix和Mac OS X上的运行时间相对较短(自从你问过)。
Subversion拥有出色的Windows工具,例如用于Explorer集成的TortoiseSVN和用于Visual Studio集成的AnkhSVN。
答案 6 :(得分:11)
有趣的是: 我在Subversion Repos中托管项目,但是通过Git Clone命令访问它们。
请阅读Develop with Git on a Google Code Project
虽然谷歌代码原生发言 Subversion,你可以轻松使用Git 在开发期间。正在寻找“git svn“表明这种做法是 普遍,我们也鼓励你 试验它。
在Svn存储库上使用Git可以带来好处:
backup/public
svn存储库供其他人查看答案 7 :(得分:9)
绝对是svn
,因为Windows最多是git
世界的二等公民(有关详细信息,请参阅http://en.wikipedia.org/wiki/Git_(software)#Portability)。
更新:抱歉链接已损坏,但我已经放弃尝试使用包含括号的URI。 [现在链接修复。 -ed]
答案 8 :(得分:9)
没有真正回答你的问题,但如果你想要Distributed Revision Control的好处 - 听起来像你做的那样 - 并且你正在使用Windows我认为你最好不要使用Mercurial而不是那个Git因为Mercurial有更好的Windows支持。 Mercurial也有Mac端口。
答案 9 :(得分:9)
如果您的团队已经熟悉cvs或svn等版本和源代码控制软件,那么,对于一个简单的小项目(例如您声称的那样),我建议您坚持使用SVN。我对svn很满意,但对于我在django上做的当前电子商务项目,我决定使用git(我在svn-mode中使用git,也就是说,我使用集中式仓库来推送和拉动来自至少与其他一个开发者合作)。另一个开发人员对SVN感到满意,虽然其他人的体验可能不同,但我们俩都很难在这个小项目中使用git。 (如果重要的话,我们都是核心Linux用户。)
当然,您的里程可能会有所不同。
答案 10 :(得分:8)
重点是,Git是一个分布式VCS,而Subversion是一个集中式VCS。分布式VCS有点难以理解,但有许多优点。如果您不需要这些优势,Subversion可能是更好的选择。
另一个问题是工具支持。您计划使用的工具能更好地支持哪种VCS?
编辑:三年前,我这样回答:
Git目前仅通过Cygwin或MSYS在Windows上工作。 Subversion从一开始就支持Windows。作为git-solutions 对于Windows可能适合您,可能有问题,最多 Git的开发人员使用Linux并且没有可移植性 从头开始。目前我更喜欢Subversion Windows下的开发。在几年内,这可能是无关紧要的。
现在世界发生了一些变化。 Git现在在Windows上有很好的实现。虽然我在Windows上没有经常测试(因为我不再使用这个系统),但我非常有信心,所有主要的VCS(SVN,Git,Mercurial,Bazaar)现在都有适当的Windows实现。 SVN的这个优势已经消失。其他要点(Centralized vs. Distributed和检查工具支持)保持有效。
答案 11 :(得分:6)
我会选择SVN,因为它更广泛传播并且更为人所知。
我猜,Git对Linux用户会更好。
答案 12 :(得分:4)
归结为:
您的发展是线性的吗?如果是这样,你应该坚持使用Subversion。
另一方面,如果您的开发不是线性的,这意味着您需要为不同的更改创建分支,然后将这些更改合并回主开发线(Git称为主分支)然后Git会为你做更多的事情。
答案 13 :(得分:4)
我已经使用了SVN很长一段时间,但每当我使用Git时,我觉得Git功能强大,重量轻,虽然有一点学习曲线,但比SVN更好。
我所注意到的是,每个SVN项目随着它的增长而成为一个非常大的项目,除非它被导出。其中,GIT项目(以及Git数据)的重量非常轻。
在SVN中,我处理过从新手到专家的开发人员,如果他们从另一个SVN项目中复制一个文件夹以重新使用它,新手和中间人似乎会引入文件冲突。然而,我认为在Git中,你只是复制文件夹并且它有效,因为Git并没有在其所有子文件夹中引入.git文件夹(如SVN所做的那样)。
经过很长时间的SVN处理后,我终于想把我的开发人员和我转移到Git,因为很容易合作和合并工作,以及一个很大的优势就是本地副本&# 39; s更改可以尽可能多地提交,然后最终一次性推送到服务器上的分支,这与SVN不同(我们必须在服务器上的存储库中不时提交更改)。
任何可以帮我决定是否真的应该使用Git的人?
答案 14 :(得分:4)
我可能会选择Git因为我觉得它比SVN强大得多。有一些廉价的代码托管服务可供我使用 - 您无需进行备份或任何维护工作 - GitHub是最明显的候选者。
那就是说,我对Visual Studio和不同SCM系统的集成一无所知。我认为与SVN的集成显着更好。
答案 15 :(得分:4)
目前还没有在Windows下本地支持Git。它针对Posix系统进行了优化。但是,运行Cygwin或MinGW可以让你成功运行Git。
现在我更喜欢Git而不是SVN,但是如果你来自CVS,SVN的土地需要一段时间才能超过门槛。
答案 16 :(得分:3)
YouTube上有一个有趣的视频。这是来自Linus Torvalds本人:Goolge Tech Talk: Linus Torvalds on git
答案 17 :(得分:3)
你试过Bzr吗?
非常好,非常(制作Ubuntu的人)之所以成功,是因为他们不喜欢市场上的任何其他产品......
答案 18 :(得分:3)
我可以扩展这个问题并询问Git是否在MacOS上运行良好?
回复评论:感谢您的新闻,我一直期待着尝试一下。我将把它安装在家里的Mac上。
答案 19 :(得分:2)
SVN在Windows下似乎是一个不错的选择,正如其他人所指出的那样。
如果您的某些开发人员想要尝试GIT,它可能总是使用GIT-SVN,其中SVN存储库在GIT存储库中重新创建。然后,他应该能够在本地使用GIT,然后使用SVN将其更改发布到主存储库。
答案 20 :(得分:1)
你必须使用DVCS,这就像源代码管理的一次巨大飞跃。我个人使用Monotone并加快开发时间。我们将它用于Windows,Linux和Mac,并且非常稳定。我甚至让buildbot在每个平台上进行项目的夜间构建。
DVCS在发布时通常意味着您将创建一个中央服务器,仅供人们推送更改。