毫无疑问,有关程序员工具的大多数争论都归结为(用户)个人选择或设计重点,即根据特定用例(由工具制造商)优化设计。文本编辑器可能是最突出的例子-可以在Windows上工作的编码器,可以在家中Mac上的Haskell中进行编码的编码器,可以实现跨平台和编译器集成的价值,因此选择Emacs而不是TextMate等。 />新技术真正地胜过现有选件的情况并不常见。

版本控制系统(VCS),尤其是集中式VCS(CVS)实际上就是这种情况和SVN)与分布式VCS(Git和Mercurial)的对比?

我使用SVN已有大约五年的时间,目前在我工作的地方使用SVN。不到三年前,我转而使用Git(和GitHub)进行我的所有个人项目。

我可以想到Git相对于Subversion的许多优势(而且大部分优势)相对于集中式VCS而言,它更抽象了分布式的优点),但是我想不出一个相反的例子-Subversion比Git更好的一些任务(这是相关的,并且是程序员通常的工作流程中出现的)。
我从中得出的结论是,我没有任何数据-不是说Git更好,等等。

我的猜测是存在这样的反例,因此存在这个问题。 >

评论

@jokoon:有效的是什么?肯定不会提高速度,因为与本地操作相比,即使快速的以太网也很慢。

请参阅此StackOverflow问:为什么要使用SVN?那里有任何隐藏的职业玩家(通过GIT / Mercurial / Bazaar)吗?

我一直以为Git太过推崇。这是一种时尚,尽管这种想法遭到了许多反对,但程序员对时尚并不陌生。像这个世界上的每个人一样,每个人都想要闪亮的新玩具(Git)。 Git可能不错-甚至对某些人来说很棒-但客观思考从未比SVN更好。

我以为SVN还是好用的,学习曲线比GIT好。

这个问题最近被搁置,主要是基于意见。这种分类是错误的;请注意,这个问题已有很长时间了;关于DVCS的优点有很多问题,而这个问题并没有问它是否更好(意见),但是它有什么好处。差异不是意见,而是整体产品是否有效-这很棘手(但不是这个问题的重点)。

#1 楼

Subversion是一个中央存储库

虽然很多人希望拥有分布式存储库以明显提高速度和多个副本的好处,但在某些情况下,更希望使用中央存储库。例如,如果您有一些关键的代码段,不想让任何人访问,则可能不希望将其放在Git下。许多公司希望将其代码集中化,并且(我猜)所有(严肃的)政府项目都在中央存储库中。

颠覆是传统常识

这就是说许多人(尤其是经理和老板)拥有通常的方式来对版本进行编号,并将其视为硬编码到他们大脑中的“单行”。没有冒犯,但是Git的自由并不容易吞噬。任何Git书籍的第一章都告诉您将所有常规的理想从头脑中清除,然后重新开始。

Subversion是一种方式,而其他什么都没有。版本控制系统。它有一种完成工作的方式,每个人都以相同的方式进行。期。这使得从其他集中式VCS到SVN的过渡变得容易。 Git甚至不是一个纯粹的VCS,它是一个文件系统,具有许多拓扑结构,可用于在不同情况下设置存储库-而且没有任何标准。

其他优点是:


SVN支持空目录
SVN具有更好的Windows支持可以检出/克隆子树
SVN支持专有的访问控制svn lock,该功能对于难以合并的文件很有用
SVN更容易支持二进制文件和大文件(并且不需要复制旧文件版本。)
添加提交涉及的步骤要少得多,因为没有任何拉/推操作,并且您的本地更改始终基于svn update隐式地重新建立。


评论


“ Subversion以一种方式做到这一点”-我也这么认为,直到我开始目前的工​​作。在我目前的工作中,声称没有信任问题的老板将服务器配置为需要锁定。在我们的系统中没有合并发生。文件已锁定在存储库中,没有锁,没有其他人可以写入文件。对于那些需要宪法的人来说,自上而下的控制绝对是svn比git更好的。

–丹·雷(Dan Ray)
2011年9月30日12:16

中央存储库的优点之一是易于备份。如果所有签入的代码都放在一个位置,并且该位置具有异地备份,那么即使办公室被烧毁,您也不会丢失所有内容。使用DVCS,除非您对开发人员的计算机进行异地备份,否则您将丢失所有尚未推送到异地备份的服务器的内容。

– Paul Tomblin
2011年9月30日12:27在

为什么不能集中使用git?只需要一个中央存储库,您的开发人员就可以像他们检出,更新和提交一样克隆和拉动和推送。

– David Thornley
2011年9月30日14:12在

@PaulTomblin-根据工作流程,Git可以提供更好的备份。例如,我们使用私有github仓库,我经常将代码推送到功能分支。如果我的同事做git fetch origin,他们每个人都有我代码的备份,以及Github本身提供的备份。 (我们会定期修剪本地和Github上合并的分支机构。)

–内森·朗(Nathan Long)
2011-09-30 15:27

您似乎暗示对于大型公司或政府工作而言,中央管理系统更为安全。这是不正确的。如果您的计算机上有该代码的副本,则也有该代码的副本。它是来自中央服务器还是拥有DVCS存储库的中央文件系统都没关系。

–约翰·费舍尔
2011-09-30 17:32

#2 楼

Subversion与Git相比的一个好处是Subversion仅允许检出子树。使用Git,整个存储库是一个单元,您只能获得全部或一无所获。使用模块化代码,与Git子模块相比,这可能会很好。 (显然,尽管Git子模块也有其位置。)

还有一点点小好处:Subversion可以跟踪空目录。 Git跟踪文件内容,因此不会显示没有任何文件的目录。

评论


恕我直言,使用子树是SVN在GIT上唯一拥有的东西。采取观点,空目录是不错的选择,但也不是必须的(可以解决)。如果git子模块和git子树不那么令人困惑,那么将不会有很多人无法迁移到GIT。一些人提到的其他优点归结为(开发人员)心态。例如。如果您需要自上而下的话,那很好。我不会为你工作。

–直到
2011-09-30 15:13

有趣的是,这些都是可以支持SVN(以及其他集中式版本控制)的唯一论点

–dukeofgaming
2012年3月7日在6:39

为什么好笑? -较新的系统向较旧的系统学习。与git相比,RCS甚至还有一个好处:可以轻松地手动编辑历史记录文件,并且可以具有按文件的分支。但是eolution涉及功能丢失...

–约翰内斯
2012年8月8日在22:03

我听说有一家游戏公司正是出于这个原因在GIT上使用SVN-当您谈论一个大小为GB的存储库时,它突然变得很重要!

–詹姆斯
2012年6月5日23:45

从git版本1.8.0开始,您现在可以使用git subtree命令来完成此操作。最后的Subversion优势咬住了灰尘:)此处的详细信息:github.com/gitster/git/blob/…注意:即使这是指向github项目的链接,git-subtree现在也是核心git发行版的一部分。

–卡尔
2012年11月19日4:25



#3 楼

我可以想到三个。首先,使用它比较容易,特别是对于非开发人员而言。从概念上讲,它比DCVS选项要简单得多。其次是成熟度,尤其是Windows上的TortoiseSVN。不过,TortoiseHg正在快速追赶。第三,在某些情况下,野兽的本质(就像一个文件系统的映像,您可以从树的任何级别检出内容)可以派上用场,例如对数十种不同的配置文件进行版本控制没有数十个存储库的服务器数量。

这并不是说我们没有将所有开发转移到Mercurial。

评论


较容易打钩是一个重要的优势,因为这使它更有可能被使用。 SVN肯定比没有版本控制要好得多,并且如果有人对旧方法之以鼻,那么SVN可能是他们的最佳选择。

–跳楼
2011-09-30 11:58



@jhocking:我不喜欢SVN,但是如果有人告诉我“我不喜欢这些新的DVCS东西,那么我将继续使用CVS”,那么我绝对会推荐它:至少这是一条轻松的道路部分理智的VCS ;-)

– Joachim Sauer
2011年9月30日12:10

@jhocking在每种情况下,新方法并不总是最好的。它使人想起了NASA花费数百万美元开发一支可以用0g书写的笔的古老故事。另一方面,宇航员用铅笔制作。有时候旧的方法更好,现在就下车吧!

– Maple_shaft♦
2011年9月30日12:14在

@maple_shaft,有时不是。 snopes.com/business/genius/spacepen.asp

– Peter Taylor
2011年9月30日12:19在

容易不休是高度主观的,并且很大程度上取决于您如何尝试使新知识适合您可能已经知道的内容。您的学习来源也有很大不同。如果按手册页进行操作,祝您好运。如果您是由一位已经精通该技巧的好老师教导的,那么您就已经做好了。在YouTube上观看了几段优秀的视频后,我发现git非常有意义。如果您从已经将其精炼到简单核心的人那里得到了理解,那么任何事情都将更容易理解。

– WarrenT
2012年8月30日23:13

#4 楼


从管理员和管理员的角度来看,SVN存储库更易于管理(ACL +身份验证方法+热拷贝+镜像+转储)
SVN *-钩子易于实现和支持
> svn:external比子模块具有更强大的功能和灵活性
基于文件系统的存储库树比仅具有逻辑分隔的单片存储库更易于使用
SVN具有更多不同的客户端工具
SVN具有第三方可用的Web前端,比Git的要好得多。
SVN不会伤脑筋


评论


不会伤脑筋吗想教我如何轻松地将分支与SVN中的冲突合并?

– WarrenT
2012年8月30日23:17

“更好的”工具/前端,这是一个移动的目标。工具在两方面都得到改善。我们都不知道几年后将提供哪些工具。 10个月前的评估可能会随时间轻松变化,现在可能已过时。我希望看到实质性的答案。

– WarrenT
2012年8月30日23:23

树冲突?检查一下是或否对所有选项?不。Svn旨在激怒。清理工作副本命令?否。还原无法清除未版本控制的文件。

– Warren P
13年11月16日在15:10

删除所有内容并再次签出将清除未版本控制的文件。

– jgmjgm
17年9月28日在17:23

我爱你的最后一个主意,吉特伤了我的大脑:'(

–卢克
18年5月7日在16:06



#5 楼

我将此内容写为对其他人的答案的评论,但我想它本身应该是一个答案。

我公司为SVN精心选择的配置需要文件级锁定才能编辑内容,永远不会使用合并。结果,多个开发人员争夺锁,这可能是一个主要瓶颈,而且永远不会发生合并冲突。

SVN绝对比Git做得更好。在我向git进行的skunkworks迁移中(要求宽恕而不是许可),我的经理吓坏了很多次,因为没有任何软件强制的中央主控服务器,我们都是从属服务器。

评论


中央集权是神话问题,而不是事实。没有人能阻止我进行任何更改。使用cvc,它们可以阻止我集中更改某些内容。在DVC中也一样。 cvcs中的commit一词将commit和push压缩。

– Warren P
13年11月16日在15:19

@JonathanHenson:绝对不是Torvalds讨厌SVN的唯一原因。 SVN可能是集中式的,并且可能是更好的CVS,但很难使其成为一个好的软件。 Torvalds讨厌CVS / SVN并不是因为它们是集中式的,而是因为他认为它们是可悲的糟糕软件。他是否正确,取决于您的决定,但是看到Linux(和Android)(在数十亿设备上运行)和Git(在几乎席卷整个世界的风云)的巨大成功, d在不同意他之前要三思。多年前,Torvalds在Google上关于Git的演讲真是太神奇了。

–塞德里克·马丁(Cedric Martin)
13年11月16日在19:32

大声笑。您的经理很害怕,没有适当的备份系统。只是说“但是它的DVCS以便有人可以复制”就不会飞-我知道,当我在最后一个地方看到git时,他们实际上没有任何存储库的任何副本。请注意,锁定在某些情况下可能会很好,而git在这方面会失败-除非您拥有用于图像或其他二进制文件的神奇合并工具。 git仅适用于文本文件。

– gbjbaanb
2014年1月6日14:27

#6 楼

我很高兴您正在寻找有用的信息,但是这种问题只会引起您的注意:“我认为Git赢了很多,所以svn teh suxorz!”答案。

我尝试过,亲自发现Git对我的小团队来说太多了。对于分散在地理位置上的大型分布式团队或团队组来说,这似乎很棒。我非常了解Git的好处,但是我认为源代码控制并不能使我彻夜难眠。用弹药和高科技装备刷满牙齿。我带着一支步枪,七发子弹和一把降压刀出现。如果我需要七个以上的回合,那么我在做错事,那么我做的和其他人一样好。

我要说的是,如果您是一支中等规模的团队,小型项目,您已经熟悉SVN,然后使用它。它肯定比CVS或(抖动)SourceSafe更好,并且建立存储库只花了我不到五分钟的时间。 Git有时可能会造成过大杀伤力。

评论


真?那我建议你看看化石。

– Spencer Rathbun
2011年9月30日12:39

让我们丝毫没有争议的可能。重要主题通常是最有争议的主题,也是最有可能引起强烈拥护的观点的主题。因此,“此类问题”很重要,超出范围的回答的可能性似乎不可行。我假设本网站的用户是成年人。更重要的是,我的Q的表达方式,如果不是中立的,那么就会对颠覆者有所帮助。对我的Q的回应将不得不背诵颠覆优于git的优势,而不是相反。

– Doug
2011年9月30日12:39

@SpencerRathbun,谢谢!我将不得不看一下。我不喜欢svn,因为我对git不满意。

– Maple_shaft♦
2011年9月30日下午12:46

@Spencer-相反,作为git和hg的用户,对于那些认为git太多的人,我建议采取谨慎态度。对于曾经使用过TortoiseSVN的任何人来说,TortoiseHG都会非常熟悉(它甚至在Windows上共享相同的Explorer覆盖)。它肯定比VSS容易得多,如果我花了几秒钟的时间来设置hg存储库,提交初始状态并将其克隆到共享驱动器,我会感到惊讶。

– Mark Booth
2011-09-30 13:16



@MarkBooth如原始问题中所述,我认为这是需求和需求的问题。在我目前的工作场所中,没有回购之前。我需要将所有或大多数我想打包的项目工具打包在一起,易于使用,保留所有内容而不是增量的东西,并且可以在多台计算机上为一两个人组成的团队工作。

– Spencer Rathbun
2011-09-30 14:34

#7 楼

我的原因:


成熟度-服务器和工具(例如TortoiseSVN)
简单-涉及的步骤更少,一次提交就是一次提交。 DVCS(如Git和Mercurial)先进行提交,然后进行推送。
二进制处理-SVN比Git / Hg更好地处理二进制可执行文件和映像。由于我喜欢将与构建相关的工具检入源代码管理,因此对.NET项目尤其有用。
编号-SVN具有可读的提交编号方案,仅使用数字-易于跟踪修订版本号。 Git和Hg的做法大不相同。


评论


仅当具有标准中继线时,才可以使用“提交编号方案”。否则,哪个获得主要编号?

–user1249
2012年10月10日13:32

+1 svn中的数字。这个数字是唯一的。有一些工具可以将此编号用作app-versionnumber xx.yy.zz.12882的一部分,其中12882是svn版本号。如果有生产问题,您可以询问vor版本号,然后获得使用该软件构建的确切svn-revision。

– k3b
2013年1月7日18:57



#8 楼

这都是相对的,就像maple_shaft所说的那样,如果一个对您有用,就不要改变!这样-它可以更好地处理图像和二进制文件。

评论


SVN如何更好地处理它们? Git认为每个文件都是BLOB。

– WarranT
2012年8月30日在22:59

@WarrenT由于工作流程的缘故,使用git会进行大量分支和合并(或者为什么要麻烦使用它),而实际上无法合并二进制文件。因此,您经常在SVN中的二进制文件上放置“需要锁定”属性。

– gbjbaanb
2012年10月19日19:03

某些二进制文件可以(理论上)合并,例如ODT文档。

–研究员
13年3月27日在10:32

#9 楼

可用性。它并不是Subversion的优点,而是TortoiseSVN的优点。.TortoiseGit存在,但要匹配TortoiseSVN仍有很长的路要走。有趣的是第三方工具如何发挥了如此巨大的作用。

评论


我认为Assembla(对于列表中任何受支持的SCM-SVN)比github更好

–懒Bad
2011年10月1日,下午6:56

现在也有smartgit,GitXL等,这些程序使使用git的方式更简单

– Wirrbel
13年11月16日在20:04

@LazyBadger,从没听说过。

–起搏器
15年3月25日在17:25

#10 楼

当您不需要分支和合并时,SVN(在Windows上为TortoiseSVN)非常易于理解和使用。对于简单的案例,Git过于复杂,因为它试图简化分支/合并。 ;因此大多数Git文档都假定您需要执行复杂的操作,例如分支和合并。)

评论


使用git分支和合并并不是复杂的操作。即使没有多个版本的要求,我什至在一个人的项目中使用分支。保持工作现在无法在分支中继续进行,当您发现尝试其他解决方案可能会更好时就进行分支...但是,我同意git较难学习。

– maaartinus
2011年9月30日在21:16

任何时候您需要在旧版本中进行错误修复时,都需要分支和合并。

–user1249
2012-03-10 13:31

人们为什么不认为水银比svn或git更容易?

– Warren P
13年11月16日在15:17

我认为部分原因在于,由于SVN直到最近才不花费很高的成本就不支持分支和合并,因此它使程序员在想要不断更改某人正在从事的工作时可以站在经理的立场上。工具必须在公司的政治内部运作,还必须帮助塑造公司的政治。

–伊恩
13年11月16日在19:08

#11 楼

好吧,我的祖父可以在Windows XP计算机上使用SVN,但是他在使用Git时遇到了麻烦。也许这是TortoiseSVN优于TortoiseGit的一项成就,但我认为这与以下事实联系在一起:Git本质上更加强大,因此更加复杂,将其降低到相同水平毫无意义。

现在对我的祖父而言,这并不重要,因为他最近没有进行任何编程。但是,我曾经在一个团队中工作,我们的图形艺术家也在使用我们的源代码控制。

这些人只是希望他们的工具能够工作(我也是,但是我有现实的机会让他们在失败的情况下工作)并且很直观。除了事实,要让他们与DVCS相处还需要很大的努力,但收获不多。在团队中只有两名程序员的情况下,我们也应该坚持使用SVN。

评论


git是版本控制的更“哲学”方法。您开始考虑提交,分支等的语义。因此,想要将VCS用作“备份”和分发工具的人比较困难,但是git并不困难

– Wirrbel
13年11月16日在20:06

#12 楼

在工作中,由于以下两个原因,我无法将开发人员从SVN切换到任何DVCS:


部分签出(例如,项目树中只有三个不同深度的文件夹)
文件锁定(二进制格式的报告)


#13 楼


进行“ svn提交”时的安全感。由于将提交提交到服务器,因此我无法做任何修改,以免在提交更改后删除更改。在git中,提交是本地的,因此在我推送之前,一个流浪的'rm -rf'都结束了。
提交已通过身份验证。默认情况下,我可以在git中告诉我我以任何人的身份提交。
需要更少的命令来学习日常使用。 'svn checkout','svn up'和'svn commit'将使您走得更远。
共享的Checkout效果更好。当您提交时,它会要求您提供用户名/密码,而不必记住要传递某些命令行参数。有时在工作中,我们有一台共享的机器,并且共享了某些项目的svn签出。有人可能会说“ Bob,您可以在这台机器上查看它吗”,他可以,而且他可以以用户身份进行更改,而不会费劲。
存储库布局。您可以有一个伞形项目和子项目,然后选择要检出的内容。
修订号是递增的整数。
专为中央存储库工作流而设计。


评论


+1用于身份验证问题。需要对Git提交进行签名,并且需要检查签名,这很困难。

–基督徒
13年11月16日在22:03

#14 楼

速度。克隆大型git仓库有时需要10到15分钟,而类似大小的subversion仓库则需要几分钟才能检出。

评论


但是结帐/克隆是一种罕见的操作。在大多数情况下,git比颠覆要快。

–rds
2011年11月9日,11:16

git clone --depth = 1是您的朋友,如果您不关心历史

–休伯特·卡里奥(Hubert Kario)
2013年1月7日14:53

#15 楼

其他人已经发布了一些很好的答案,但是权限呢?使用基于SSH的Subversion,您可以在服务器上为SVN创建一个单独的帐户。可以为不同的开发人员提供对存储库不同部分的不同访问权限。 GIT可以做到吗?我猜那里有一种乙醇钛矿,但对我来说似乎并不灵活或健壮,也不知道实际上有人在使用它。

评论


其他人则提到“自上而下的管理控制”。这是我的环境的关键要素-我们的存储库中有某些区域需要锁定为某些用户组为只读或什至为未读。我们还需要有一个可以指向的位置,然后说:“这是权威的主副本,如果您的副本与此处的内容不符,则不是官方的。”

– alroc
2013年1月7日19:23

项目负责人的祝福仓库,中尉正在控制谁可以承诺。在启用了http-auth的服务器上发布的Git存储库(使用svn使用的相同的apache模块)进行身份验证,并说出谁可以克隆/签出什么内容。当然,它不如每个目录的svn权限那么细,但对我来说,它看起来更像是微管理,而不是实际需要。

–休伯特·卡里奥(Hubert Kario)
13年1月7日在20:17

@HubertKario-这引发了一个问题,“您最好的程序员是否应该花时间检查别人的代码?”实际上,我对这个问题的答案非常感兴趣,因此我将其发布在这里:programmers.stackexchange.com/questions/181817/…

– GlenPeterson
13年1月7日在20:41

#16 楼

我将此作为回应而不是发表评论。更好,因为就像很多人都在说:“这就是我们从一开始就应该进行的工作方式”。没错,您可以使用DVCS来实现与SVN相同的功能,从而以某种方式使SVN过时。

但是,并不是每个软件项目都像它得到的一样好:

长期项目从DVCS中受益匪浅,因为它使用的开销更少,可以更好地进行管理(分支等),并受到google代码和github之类的主机的大力支持。项目不是唯一的项目,在没有外部世界或互联网任何帮助的情况下,公司正在开发其他类型的项目:所有事情都是在内部完成的,而且通常是短期的。一个很好的例子:视频游戏。代码发展迅速。

对于后一种情况,开发人员并不真正需要DVCS可以提供​​的分支或复杂功能,他们只想共享源代码和资产。他们编写的代码不太可能被重用,因为有最后期限。由于以下几个原因,他们依赖SVN而不是DVCS:


开发人员拥有属于该公司的计算机,并且这可能会迅速改变。配置存储库会浪费时间。
如果这些人没有自己的计算机,则他们不太可能使用相同的源代码/项目的一部分。再加上一个用于集中式数据的数据。
网络速度快,资金大,允许使用处理所有SVN的集中式服务器,这是不好的做法,但是可以进行备份。如果使用的是错误的方法:在同级上没有冗余地同步文件不是一个简单的问题,并且如果您始终希望它是完美的,那么“以正确的方式进行操作”就无法及时做到。

考虑一下游戏行业的机器以及SVN如何节省时间。人们在这些项目上进行了更多的交流,因为游戏是关于重复性编程和自适应代码的:没有什么很难编写的,但必须尽快以正确的方式进行。雇用了程序员,他们编写自己的部分,对其进行编码,一点点测试,提交,完成,然后由游戏测试人员处理其余的事情。 SVN用于小型,短期,紧密的团队项目。您不需要从SVN中学到很多东西,它几乎是带有愚蠢差异的FTP。

评论


您能解释一下游戏行业的例子吗?

–约翰尼
15年4月20日在23:02

#17 楼

Subversion和Git都鼓励使用特定(且非常不同)的开发和协作方法。有些组织可以从Git中获得更多收益,而其他组织则可以从Subversion中获得更多收益,这取决于它们的组织和文化。 。这两种流行的DVCS工具都鼓励使用小型存储库,而开发人员之间的重用是通过具有(相对)稳定接口的已发布库进行的。 ,开发人员之间的交流越来越多,并且对日常开发活动的组织控制程度更高。在这些组织更紧凑的团队中,开发人员之间的重用倾向于通过具有(相对)不稳定接口的未发布库进行。 TortoiseSVN还允许Subversion支持非专业程序员(例如系统工程师,算法工程师或其他主题领域专家)成员的跨学科团队。

如果您的团队是分布式的,则成员要么在家工作或来自许多不同的国际站点,或者如果他们更喜欢独自工作并保持沉默,几乎没有面对面的交流,那么像Git或Mercurial这样的DVCS将是很好的文化选择。

如果,另一方面,您的团队位于一个站点上,采用了积极的“团队”开发方法,并且进行了很多面对面的交流,并且在空中“嗡嗡作响”,因此SVN可能会更好文化适应性,特别是如果您有很多跨学科团队。

当然,可以配置Git和Hg(功能强大且灵活)以执行几乎任何您想做的事,但这肯定是更多的工作,而且它们肯定更难使用,特别是对于那些团队成员来说最后,我自然不会倾向于使用任何形式的版本控制。

最后,我还发现在Svn下使用“热”库开发(使用CI和测试驱动方法)共享功能可以更加分散和松散的团队难以实现协调发展的步伐。

#18 楼

以下是我仍然使用SVN的两个原因。

学习曲线。 SVN比Git更容易,甚至包括设置(服务器或客户端),可用性和命令也更容易。
更好的服务器软件包,例如Subversion Edge,VisualSVN,uberSVN等。

评论


为#1 +1。在这里比较SVN和GIT图表steveko.wordpress.com/2012/02/24/10-things-i-hate-about-git

– s_t_e_v_e
14年1月1日在16:58

#19 楼

目前,版本控制有两个主要趋势:分发和集成。

Git非常适合分散。

SVN内置了许多与其集成的工具。设置SVN服务器是很常见的,以便在签入修复程序时在签入注释中提及错误号,它会自动将其设置为“处于测试中”状态,并提醒指定的测试人员需要看它。然后,您可以标记一个发行版,并获取此发行版中已修复的所有错误的列表。

#20 楼

在Subversion中,可以在完成提交并推送之后编辑日志消息(也称为“提交消息”)。对于大多数实际用途,通过设计在分散系统(包括git)中是不可能的。当然,在git中,您可以执行“ git commit --amend”,但是在将您的提交推送到其他位置后,这无济于事。在SVN中,当您编辑日志消息时,您是在每个人都共享的中央存储库上进行操作,因此每个人都可以进行编辑,而修订版本的标识符不会更改。

事实通常非常有用。除了仅修正日志消息中的错误或遗漏之外,它还使您能够执行诸如更新日志消息以引用将来的提交之类的事情(例如修正错误或完成当前修订中引入的工作的修订) 。

顺便说一下,没有丢失信息的危险。如果您真的担心,pre-revprop-change和post-revprop-change钩子可以保存旧消息的历史记录,或者发送带有日志消息diff的电子邮件(实际上,这比较常见),因此审核跟踪。

评论


这在git中也很简单;例如git --amend;做到这一点的另一种方法是通过git reset --soft HEAD ^,它只是向后走而不会改变索引,因此您可以编辑/重写提交消息。

– Doug
13年11月17日,0:03

嗨,道格是的,您可以在本地存储库中执行此操作,但是我在谈论的是一旦将更改推到其他位置,“ git commit --amend”对您没有太大帮助。在SVN中,您可以在中央服务器上编辑日志消息,这完全是由于中央服务器的概念。这就是我所说的“分散系统中的设计不可能”。我将编辑答案以使其更清楚。

–卡尔·福格尔(Karl Fogel)
2013年11月17日19:32



我喜欢所谓的“可以玩弄历史”的功能。如果不是故意的,我会认为这是一个错误。

– cHao
15年1月13日在15:49