为什么Git比Subversion更好?
我已经使用了Subversion几年,在使用SourceSafe之后,我只喜欢Subversion。 结合TortoiseSVN,我无法真正想象它会如何更好。
然而越来越多的开发者声称Subversion存在问题,我们应该转向分布式版本控制系统的新品种,比如Git。
Git如何改进Subversion?
Git并不比Subversion好。 但也不会更糟。 这不一样。
关键的区别是它是分散的。 想象一下,你是一名开发人员,在笔记本电脑上开发,并且希望拥有源代码控制权,以便可以返回3小时。
使用Subversion,你有一个问题:SVN信息库可能位于一个你无法访问的位置(在你的公司,而你目前没有互联网),你不能提交。 如果你想复制你的代码,你必须从字面上复制/粘贴它。
使用Git,你没有这个问题。 您的本地副本是一个存储库,您可以承诺它并获得源代码管理的所有好处。 当您重新获得与主存储库的连接时,可以对其进行提交。
这看起来不错,但要记住这种方法增加了复杂性。
Git似乎是“新的,有光泽的,酷”的东西。 这绝对不是坏事(因为Linus为Linux内核开发写了一个理由),但是我觉得很多人跳过“分布式源代码控制”列车,只是因为它是全新的,并且由Linus Torvalds编写,而没有实际上知道为什么/如果它更好。
Subversion有问题,但Git,Mercurial,CVS,TFS或其他。
编辑:所以这个答案现在已经过去了一年,并且仍然会产生很多upvotes,所以我想我会添加更多的解释。 在写这篇文章的最后一年,Git获得了很多动力和支持,尤其是在GitHub这样的网站真正起飞之后。 我现在使用Git和Subversion,我想分享一些个人见解。
首先,当分散工作时,Git可能会让人感到困惑。 什么是遥控器? 以及如何正确设置初始仓库? 是一开始就提出的两个问题,尤其是与SVN简单的“svnadmin create”相比,Git的“git init”可以采用参数--bare和--shared,这似乎是“正确”设置集中的方式库。 这是有原因的,但它增加了复杂性。 “checkout”命令的文档对于人们转换非常困惑 - “正确”的方式似乎是“git clone”,而“git checkout”似乎改变了分支。
当你分散时Git真的会闪耀。 我在家里有一台服务器,路上有一台笔记本电脑,而SVN在这里根本不能很好地工作。 使用SVN,如果我没有连接到存储库(我知道关于SVK或关于复制回购的方法),我不能拥有本地源代码控制。 使用Git,无论如何这都是默认模式。 这是一个额外的命令(git commit在本地提交,而git push origin master将主分支推送到名为“origin”的远程)。
如上所述:Git增加了复杂性。 创建存储库,检出与克隆,提交与推送两种模式......你必须知道哪些命令在本地工作,哪些与“服务器”一起工作(我假设大多数人仍然喜欢中央“主存储库” )。
此外,工具仍然不足,至少在Windows上。 是的,有一个Visual Studio AddIn,但我仍然使用msysgit的git bash。
SVN的优点是学习起来要简单得多:如果你知道如何创建,提交和签出,那么你的存储库和所有的变化都是针对它的,并且你准备好了以后能够像分支,更新等那样获取内容上。
如果一些开发人员并不总是连接到主存储库,那么Git的优势在于它更适合。 而且,它比SVN快得多。 从我所听到的来看,分支和合并的支持要好得多(这是可以预料的,因为这是它写的核心原因)。
这也解释了为什么它会在互联网上获得如此多的热门话题,因为Git非常适合开源项目:只需将它分叉,将您的更改提交到您自己的Fork,然后让原始项目维护人员进行修改。 有了Git,这只是起作用。 真的,在Github上试试它,这很神奇。
我还看到的是Git-SVN Bridges:中央存储库是一个Subversion回购,但开发人员在本地使用Git,然后桥接器将其更改推送到SVN。
但即使有这么长时间的补充,我仍然坚持我的核心信息:Git不会更好或更糟,它只是不同而已。 如果您需要“离线源代码管理”并且愿意花费额外的时间学习它,那太棒了。 但是,如果你有严格集中的源代码管理和/或努力引入源代码管理,因为你的同事不感兴趣,那么SVN的简单和优秀的工具(至少在Windows上)闪耀。
有了Git,你几乎可以离线执行任何事情,因为每个人都有自己的存储库。
分支之间的合并和分支之间的合并非常简单。
即使您没有项目的提交权限,您仍然可以使自己的存储库联机,并为您的补丁发布“推送请求”。 每个喜欢你的补丁的人都可以将他们拖入他们的项目中,包括官方维护者。
分叉一个项目,修改它,并且仍然保持合并在来自HEAD分支的错误修正中是微不足道的。
Git适用于Linux内核开发人员。 这意味着它非常快(它必须是),并且可以扩展到成千上万的贡献者。 Git也占用更少的空间(Mozilla存储库的空间减少了30倍)。
Git非常灵活,非常有TIMTOWTDI(有多种方法可以做到这一点)。 你可以使用你想要的任何工作流程,Git将支持它。
最后,还有GitHub,一个用于托管Git存储库的好网站。
Git的缺点:
其他答案在解释Git的核心特性方面做得很好(这很好)。 但也有很多小方法让Git的表现更好,并有助于让我的生活更加健康。 以下是一些小东西: