为什么我应该使用git而不是svn?

33

我以前使用Visual Studio + C#工作,并且以前使用过svn,但现在不再使用,因此我想将我的代码再次放到源代码控制下。

最近我听说了git,并阅读了git wiki和这个这个,并且我已经了解到与TortoiseSvn等svn的图形界面不同,git没有GUI客户端,或者至少我还没有找到。

我的问题是:

  • git相对于svn有什么优点?
  • 在哪里可以找到易于使用的git前端?
  • 是否有像ANKH一样的插件,可以使git与Visual Studio一起使用?
  • 在哪里可以找到开始使用git的其他资源?

你可能会发现这个问题很有趣:https://dev59.com/jnVD5IYBdhLWcg3wTJrF - Bastien Léonard
请参见https://dev59.com/anVD5IYBdhLWcg3wXaid。 - David Schmitt
前段时间,我在你提到的git wiki页面上发表了评论。根据http://svnvsgit.com/,这是不公平的。依我的看法,在当前状态下,它无论如何都不能提供公正的比较。 - bahrep
9个回答

24

以下是我个人使用 git 和 svn 的经验:

  • Git vs. SVN: git 跟踪源代码树的状态、历史和完整性,而 SVN 只跟踪状态。

特别是在合并时,git 广泛使用存储的历史记录 (跨重命名和合并),使决策更加明智,从而导致更少的冲突。

通过仓库建立完整、加密可验证的完整性链,有助于建立对底层系统的信任或检测它们失效。但是,创建“干净”补丁可能会很复杂。拥有正确的工作流程可以帮助解决这个问题。

最后,git 默认情况下在本地工作,这使得与 SVN 相比具有难以置信的巨大优势,因为 SVN 几乎必须去中心仓库执行任何操作。

  • 软件:请参见此问题,有几个独立的 GUI 用于处理仓库、历史记录浏览器和 shell 扩展。

  • Studio Plugin: GitExtensions 有一个适用于 Visual Studio 2005 和 2008 的插件。

  • 文档: 首先查看GIT 用户手册。在git-scm.com上还有更多教程和书籍链接。


4
Git是一种分布式版本控制系统,而Subversion则是一种集中式版本控制系统。两者都可以检查状态、历史记录并保证完整性,但方式不同。 - Bert Huijben
SVN不会注意到仓库存储的意外或恶意更改,而且SVN将“历史记录”跟踪为一系列断开的补丁,没有太多的谱系。在SVN中尝试在两个分支之间多次合并,它会为所有已经合并的更改创建冲突。 - David Schmitt
1
啊..你使用的是一年前的Subversion版本?(自1.5以来,合并跟踪功能已经可用;当前版本为1.6)我猜你的git也过时了吧?作为用户,你可以将其视为一系列补丁(同样适用于git)...但在内部,Subversion并不是这样看待它的。 - Bert Huijben
2
事实上,我最近没有使用 SVN 合并的经验。尽管我已经阅读了 SVN 书中相关章节,但我仍然认为 Subversion 仍在努力追赶:“一旦从分支到主干执行了 --reintegrate 合并,该分支就不能再用于进一步的工作。” 还有很长的路要走! - David Schmitt
1
David,是的,我发现在重新整合后最好删除我的分支,然后重新创建它。这真是太麻烦了,会阻碍合并和分支的使用。 - jpierson
链接已失效:http://stackoverflow.com/questions/32383/is-there-anything-like-tortoisecvs-and-tortoisesvn-for-git - Venkat

9

这里有一个相关的问题,涉及到与tortoise类似的GIT工具。

GIT相对于SVN的优势已经被讨论过了再次讨论并不是这里需要详细阐述的。

至于Visual Studio插件,我认为目前还没有,并且短时间内也不会有。也许我错过了什么。

在这里尝试一下如何在Windows上开始使用git的好指南。

至于我的个人口味和看法,基于我个人对版本控制的要求,我继续坚持使用svn,并认为svn在工具和社区支持方面处于另一个层次。同时,我认为svn非常成熟,这并不意味着git不能胜任工作。


Git似乎被认为是相对较新的。如果有什么安慰的话,我使用的是Mac,Xcode开发环境也没有像svn一样支持git。 - Abizern
是的,我已经使用SVN相当长一段时间了,它从来没有让我失望过。不想听起来像一个Windows粉丝,我认为Git在Linux环境中比其他任何操作系统环境下都更好。 - Kostas Konstantinidis
你的回答发布已经过去了7年。关于这个话题仍有很多需要详细阐述的地方。从事实出发,Git维基页面似乎从未提供过SVN和Git之间公正的比较。这真是遗憾。 - bahrep

8

我不想讨论git和svn的利弊,但以下是一组简单的比较:为什么Git比X更好

一些很好的Git资源:

  1. Git Ready。一个类似博客的网站,提供关于git的初级、中级和高级使用小贴士。
  2. Git Magic。介绍了你可以做什么的详细说明。
  3. GitCasts视频教程 - 看到实际操作的过程有助于理解它的强大功能。包括有用的Git On Windows视频教程。

祝玩得开心!


那个域名被接管了吗?目前在http://whygitisbetterthanx.com/的内容不是我想链接或点赞的任何东西。 - WiseOldDuck

5

TortoiseGit是可用的 - 只需谷歌一下即可(我记不得URL了):

  • 由于分布式,您不需要一直连接到服务器,只需在本地工作并在需要时进行push

  • 它非常快速且不使用太多带宽。

  • 而且,如果它对Linus足够好,那么它对您也足够好 :)

更新:TortoiseGit链接


4
Git相比于SVN的优势是什么?在决定使用Git还是SVN之前,请确保您充分了解自己的需求并了解Git和SVN提供和支持的内容。不幸的是,在Git和SVN的话题上存在很多不公平的偏见,就像我最近在http://svnvsgit.com/上发现的那样。让我引用这里的一个回答者(@Konstantinos)的话:“GIT相比于SVN的优势被反复讨论,所以这不是某个人应该在这里详细阐述的内容。”虽然这个问题是7年前提出的,但这个话题仍然是热门或至少是温暖的。我最近在http://svnvsgit.com网页上遇到了这个问题,有点沮丧的是,事实上互联网上大部分Git和SVN的比较和测试都基于一些奇怪的情报,比如Mozilla存储库在SVN中非常大。这是不正确的,http://git.or.cz/gitwiki/GitSvnComparsion中描述的大部分观点都是不公平或错误的。或者这里是@DavidSchmitt(其中一个回答者)的一句话:“Git vs. SVN:git跟踪源代码树的状态、历史和完整性。SVN只跟踪状态。”SVN和Git都确保数据完整性(在我看来,SVN做得更好)。两者都跟踪历史和状态。SVN和Git之间唯一真正的区别在于Subversion是集中式的,而Git是分布式的。Subversion支持一些概念、工作流和情况,Git无法通过设计支持。同时,Git的脱机特性对某些人来说可能是一个重要的优势。选择明智!

3
我没有使用过git,但我使用过svn和bazaar(与git类似的哲学),所以我可以用一般性的术语回答你。
所谓分布式版本控制系统(DVCS)的优点在于,存储库和代码都在您的计算机上,您不依赖远程存储库进行操作。每个开发人员都有一个“分支”,他自己的存储库副本,可以进行提交、还原、检查以前的修订,而无需连接到网络。存储库的正式性是通过人类协议而非技术设置来保证的。在svn中,您只有一个存储库,即您和所有其他人都提交的存储库。在DVCS中,您提交到自己的存储库,另一个开发人员提交到他自己的存储库,当每个人愿意时,您都可以将自己的修改推送到官方指定的存储库中。
另一个明显的优点是,在DVCS中进行操作非常快,非常快。当您开始在存储库中拥有大量内容时,svn变得异常缓慢。这很快就会变得非常恼人。
缺点是,DVCS更难使用,但如果需要,您可以将其用作集中式VCS。

2
我不确定TortoiseGIT在此阶段的稳定性如何,而且当你谈论与资源管理器密切集成的东西时,这是一个重要考虑因素。有人可以对此发表意见吗?
同时请注意,如果您正在寻找分布式版本控制系统的好处,git并不是唯一的选择。Git具有非常强大和非常复杂的双重优点。您可能会发现另一个分布式版本控制系统(DVCS)例如BazaarMercurial更容易过渡以获得分布式系统的好处。两者都有tortoise 界面正在开发中,但同样,我不确定它们的稳定性。(Bazaar的包含在其Windows软件包中,因此您可以认为它处于相当良好的阶段。)
一次快速搜索还发现了 VisualHgBzr-VisualStudio,尽管我不知道它们在使用中的准备情况。请自行决定是否使用。

TortoiseGIT很不稳定。我用过它,从我的经验来看:它搞乱了我的代码库 - 我不得不重新从Github克隆,而且没有一个命令能够正常工作。:( 哦,好吧。希望随着时间的推移它会变得更加稳定 - 这将是一个非常有用的工具。 - Lucas Jones
@person-b,自从在这里推荐后我一直在使用TortoiseGIT,但它似乎也不太稳定,你有什么其他的Git GUI推荐吗? - Jhonny D. Cano -Leftware-

1
Git似乎现在是版本控制的行业标准,取代了SVN和CVS等工具。从用户角度来看,相对于SVN,Git带来更多功能,有助于更好地管理代码变更。而且,借助像GitHubBitBucket这样的网站,设置存储库也更容易,无需拥有自己的服务器。
Git在命令行中易于运行(比SVN有更多有用的命令)。此外,还有一系列优秀的GUI程序,可帮助您提供Git repo的良好前端,其中GitHub DesktopSourceTree是其中的两个。

0

正如其他人所指出的,Git更快、更稳定。它是分布式的,而SVN是集中式的,如果你弄乱了中央仓库,你就会失去一切。在我的经验中,使用Git合并代码时出现问题较少。

只有一件事我不喜欢。那就是你不能使用Git下载存储库的一部分。如果你只需要一个文件夹,你需要下载整个存储库。但是,你可以用SVN做到这一点。


我曾经忘记了我的中央仓库在我的电脑里。然后我格式化了电脑 :-) 再见仓库 - hoaphumanoid
如果您的本地 Git 存储库存在于您的计算机上并且格式化了驱动器,则还会丢失其中保存的源代码和其他工作。我猜您混淆了子版本工作副本和 Git 存储库。 - bahrep
我失去了所有的提交记录。如果你使用git,这种情况是不会发生的,因为git是分布式的,每个本地副本都是整个仓库的完整副本。在svn中,你只能下载代码的最新版本。这也是为什么你不能像在svn中那样只下载git仓库的一部分的原因之一。 - hoaphumanoid
我理解这一点。但是,您使用中央存储库格式化了硬盘驱动器,明知该存储库是代码的唯一存储位置。您本可以使用托管服务来托管您的存储库,或者至少在另一台机器上部署它。在我看来,您说“使用中央存储库格式化了硬盘驱动器”,这是您的错误,而不是Subversion的缺陷。对于有经验的开发人员、公司或开源项目来说,这种情况永远不应该发生。 - bahrep
1
好的,但是有灾难恢复和备份可以帮助避免这种问题。此外,使用Git开发即使一个开发人员丢失了他的SSD也不会停止。证明:Linus Torvalds的SSD坏了,http://www.itworld.com/open-source/372837/linus-torvalds-ssd-breaks-halts-linux-kernel-development - bahrep
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接