跳到GIT之前应该了解SVN吗?[关闭]


31

我在一个部门中工作,以前没有人使用过源代码管理,包括我自己。

我正在努力推动这一概念。我花了一些时间研究SVN。我学了一些基础知识。我可以使用命令行或Tortoise创建/更新/签出/提交。我开始学习如何标记和分支,但是仍然对分支和主干之间的冲突感到困惑。我仍在学习,但是我没有一个能向我展示任何东西的自然人。它全部来自书籍/教程以及反复试验。

根据我在网上阅读的内容,似乎git最好了解一些东西,但是它也更加复杂。我不想让自己不知所措。我应该在转入git之前继续掌握svn还是现在明智地跳到git?

两种方法都有优点和缺点吗?


参见stackoverflow.com/questions/161541/svn-vs-git/2549128#2549128:两者本质上是不同的,例如,更一般地说,CVCS和DVCS是(stackoverflow.com/questions/2704996/…stackoverflow.com/问题/ 2563836 /…))
VonC

1
gitref.org是学习Git的绝佳资源。
Jeremy Heiler 2011年

4
不,它会笼罩您的思想,然后您将需要“颠覆性再教育”。git / mercurial也是更好的技术。对您的同事进行颠覆性培训将使以后很难切换到最佳工具。
Keyo

尝试Git是一个不错的简单,精心设计的入门课程
Ben Brocka 2012年

Answers:


58

没有

Git与SVN完全不同,无法为您提供帮助。如果有的话,您将在寻找“更新”和“提交”命令,并想知道为什么一切都不一样。

从下至上从Git开始,然后从那里开始。


与Git相比,标准的集中式更新/提交模式版本控制系统就像比较公交车与大众运输。一辆巴士将使用完全相同的路线从A点到达B点(以及其他所有人)。大众运输将使您以自己喜欢的路线从A点到达B点。

分布式本身具有您应该意识到的缺点。使每个人都在同一页面上需要花费更多的工作。但是,它极大地提高了灵活性。


修订哈希与数字

有人提到Git使用SHA1哈希值,而Hg使用数字。

首先,您很少(如果有的话)需要直接处理每日提交/请求中的哈希。如果您正在做差异或一些更棘手的重新定基项目,则需要拉起日志并拉散列。

使用Git,每个人都有相同的哈希值。不同的存储库没有不同的提交编号,每个人都在同一页面上。对于汞,情况却并非如此。在实践中,如果您必须拉起提交哈希并使用它们(用于比较或遍历代码的时间轴),则在使用哈希而不是数字时,与其他人进行同步更加容易。


3
也许这是美国的东西,但“大众运输”与“公共交通工具”(即公共汽车,火车等)不同吗?
Dean Harding

@Dean:是的,他们是一样的。我使用大众运输系统是因为它比“公共交通”更通用。
Josh K

让我有点困惑,直到我读到评论,因为“ MassTransit”(masstransit-project.com)也是公共汽车...
FinnNk 2011年

3
我在想的一大禁忌,它出现了。+1
ZJR

22

不,请不要打扰。

认真地,从DVCS开始。SVN受欢迎的事实并没有使其成为标准。莱纳斯·托瓦尔兹(Linus Torvalds)会告诉您,这可能会腐蚀您的大脑

阅读乔尔·斯波斯基(Joel Spolsky)的这篇很棒的文章/介绍,名为Subversion Re-education

您可能也有兴趣在阅读本其他的问题:我是一个颠覆怪胎,我为什么要考虑或不考虑水银或Git的或任何其他DVCS?

在DVCS之间进行选择

就我个人而言,我同时使用了mercurial和git,并且我认为了解两者非常重要。关于此的推荐读物是Git vs. Mercurial:请放松(请参见git-addremove示例)。我想总结一下那篇文章的两句话。

关于git:

Git的设计理念与Unix毫无二致:与Subversion,CVS或Mercurial不同,git不是一个整体式二进制文件,而是多种单独的工具,包括git-pull,git-merge和git-checkout到低级“管道”命令,例如git-apply,git-hash-object和git-merge-file。因此,就像MacGyver一样,您可以使用Git几乎完成您需要做的任何事情-其中包括非常出色的Wiki引擎,问题跟踪程序,文件系统,系统管理工具-无需保险丝修复的所有工作。

关于水银:

喜欢保持系统清洁的开发人员可能会喜欢hg安装一个二进制文件而不是144组成git的事实,并且认为git能够编辑先前提交的功能太平淡,不必要和危险的开发人员会喜欢这个事实。简单性hg通过省略该特定功能来提供。

可以在github上找到很多项目,而git更强大,但是它对于新手,尤其是Windows用户来说也有些吓人。也有bitbucket(github相当于mercurial)。

我的建议:从水银开始,一旦您对它感到满意,就拿起git;它与工具无关,而与您一起工作的人员有关

我认为Subversion的实际用途是,不是为了与其他人一起工作,而是为了为生产应用程序实现更新程序,原因如下:

  • 目前,大多数托管服务提供商中几乎都安装了svn
  • 具有良好的子项目支持(不过现在可以在git和hg中寻址)。svn up并且您的项目及其依赖项会更新。

另一个线程上引用Thorbjørn

DVCS属于Subversion,Bittorrent属于ftp

编辑:如果有一个VCS,您应该在Git之前知道,那可能是Mercurial(更友好的CLI界面,可以很好地介绍分布式概念)。该建议特别适用于Subversion的用户,因为CLI在某种程度上也很相似。与集中式版本控制相比,分布式版本控制更容易学习,因为您只需要担心存储库实例,而不用担心客户端和服务器部分是分开的


1
+1获取有用的链接。Subversion非常容易,并且有足够的文档证明,一旦您在心智模型中有了源代码控制的想法,便可以进行必要的移植。
加里·罗维

2
之前使用SVN可能会污染您的思维。

5
@John

1
我想说使用hg的主要原因是更好的Windows支持
jk。

1
当我查看Windows的Git支持时,我发现很多Git用户讨厌使用Windows的任何人,因此我们决定了哪种ghg更适合我们。
伊恩

4

您应该学习打算使用的内容。Git很受欢迎,就像Mercurial也很受欢迎一样。Git / Mercurial都是分布式源代码控制系统。

向团队介绍新概念时最重要的事情(不幸的是,版本控制被视为太多团队的新话题),它有助于概述您的目标和评估标准。您不必对此过于正式,但可以问自己以下问题:

  • 我们团队中版本控制的目的是什么。是的,所有有价值的版本控制系统都可以让您回顾历史,并查看给定文件中的更改。但是,您将使用它来确定新版本的基准吗?(点头,你要这个)。这是您想要完成的2-3行愿景声明。
  • 您的团队是否习惯于只拥有自己的本地工作环境,以后才将它们仔细地合并?如果是这样,DVCS路由可能最有意义。
  • 相反,您的团队是否习惯于使用一个共享驱动器,并且一切都在不断集成中?如果是这样,则更传统的VCS可能最有意义。

在评估替代方案时,您必须考虑所有VCS需要做的重要事情:

  • 基准代码(标记的分支,标签等)。基本上,您如何获得项目发行版中使用的确切源代码。
  • 获取本地更改到中央服务器。无论使用DVCS还是标准VCS,都需要有权威的代码副本。每个工具对这个过程的处理方式都不一样。
  • 将中央服务器中的更改获取到本地副本。
  • 如何应对实验性变化。VCS允许您在不破坏主要项目源代码的情况下更加敢于提出建议的更改。DVCS和标准VCS系统的处理方式大不相同-其中之一最适合您的团队。
  • 您如何设置和配置服务器?
  • 您需要认证吗?如果是这样,您如何确保只有被允许进行更改的人员才能实际操作?

最后,进行快速评估,以确定标准VCS或DVCS系统对您的团队而言是最佳选择。您必须选择痛苦最少的工具,否则它可能不会被采用。之后,评估最符合您需求的替代方案。

最后,了解您打算使用什么。


3

我认为很多人发现git比svn更复杂,因为它是不同的。在使用subversion(或cvs等)一段时间后,很难将模式自动转换为DVCS模型。基于此,我想您应该像研究git这样的DVCS一起研究像颠覆这样的传统VCS。

尽管git是我首选的VCS,但我想说最好还是学习Subversion。首先,仍然有很多Subversion和cvs存储库,您可能需要一天与之交互,并且您将更好地了解DVCS与传统VCS的确切优缺点。


我已经看到一些证据表明,如果您不使用过程语言,那么学习Scheme这样的语言会更容易。这可能类似地工作。
David Thornley

因此,仅用于git-svn clone与存储库进行交互。
Keyo

3

学习svn然后git将适得其反

原因如下:

  • Gits与svn完全不同。Git不满意,svn是客户端/服务器。
  • 相同的单词附有不同的含义。例如,“ git checkout ...”与“ svn checkout ...”具有不同的含义。
  • 分支是不同的。Git具有“主题”分支的概念,这是svn不支持的廉价本地分支。
  • Git有一个额外的地方,称为索引,位于工作树和您的存储库之间。Svn没有索引。使用git,您所做的更改将从工作树移动到索引,再到存储库。

我的建议是只学习git。


2

GIT和SVN中有些地方大致相同,有些则不相同。

创建/更新/签出/提交

大致相同,您应该轻松将其拾起。

如何标记和分支,但仍然对分支与主干之间的冲突感到困惑

两者不同。

并不是说您现在应该或不应该更改(我想这是您的电话),只是想指出这一点,因为这是需要考虑的问题。如果确定要尝试Git,则可以决定立即切换以免于学习SVN中与Git不同的东西。


另外,不要听Subversion的抨击:-p Git目前非常“酷”,而svn非常不酷,但是两者都有自己的位置。使用任何一种方法都比不使用任何对您有益的方法要好得多。我已经向2家小型公司介绍了VC,这很难,但是值得。
詹姆斯

+1很棒的信息,谢谢。好像我要跳了,现在是个好时机。
JD Isaacks 2011年

颠覆的地方在哪里?

2

哇; 12个答案,每个人都还在乞求这个问题...

不,Subversion不是Git的先决条件。

Subversion和Git之间没有明确的映射-如果您打算学习两者,那么您将不得不承受以下事实:它们对不同的动作使用相同的术语。(对于相同的动作,使用不同的术语。)

  • svn commit与...是不同的事情git commit
  • svn和git中的分支非常不同
  • svn存储库更像是git远程(但不是真的)
  • git存储库更像是svn工作副本(但不是真的)

这是两个用通用语言划分的工具。

您的问题以及其他大多数答案都假定git是某种svn ++;一个“更好的svn”。不是。两者是在同一空间中工作的不同工具,例如汽车和摩托车。

我建议您选择一个,掌握它,然后开始在您的团队中使用它。对于以前从未使用过版本控制的人来说,学习版本控制将非常困难。您的VCS将成为基础架构的重要组成部分,学习信任它会涉及建立新的工作习惯。这需要一段时间。

(无论哪种方式,请确保您都有系统管理员备份主存储库-丢失源代码控制将是灾难性的。)


1

可能不是-基于服务器和分布式服务器之间有足够的差异,您可能只会进一步混淆自己。

从头开始,按照良好的习惯使用您选择的DVCS,好像从头开始一样,您可能会更快乐。

去看看Mercurial(如果你不想被淹没的话)。


2
如果您不赞成,请至少给我一个解释。谢谢。两种可能:1)我可能会解决问题的答案,或者2)我可能会删除它……但
前提

1

Git仅比Subversion复杂一点,因为Git在提交和推送到中央存储库之间存在区别。

值得学习Git,同时有机会让Subversion摧毁您的思想。


1

我认为了解Subversion并不是理解Git的必要。

至少对我而言,Subversion的Git和Mercurial的最大区别在于,您有一个本地存储库,可以在其中进行签入和签出,直到代码运行正常为止,从中央存储库中签出,修复所有冲突并重新签入并推送到服务器。


1

我真的很喜欢Unix环境(Linux,MacOS X)中的git。在Windows中,它有点黑。如果方程式中包含Windows,我会考虑使用Mercurial。

我喜欢您的历史记录类,尝试SCCS,RCS,CVS,Subversion,然后使用一些有用的东西,例如Git或Mercurial。

Git和Mercurial是等价的,Git的最大好处是github。但是,如果您不想将版本控制外包,那么github就不再是等式了。


1

版本控制系统与编程语言有一些共同点,因为您学习的第一个系统将花费最多的时间。之后,选择一个新的只是学习新系统如何表达核心概念的问题。

您可以立即学习Git,并在需要时花一些时间在以后学习Suvbersion。


0

不。下载Git,创建一个github帐户,然后花两天时间分叉存储库,等等。学习5或6个bash命令,即可完成所有基本任务。我通常更喜欢GUI的“防白痴”功能,但是Git Bash几乎是一样容易。另外,如果您喜欢那条路线,Git Gui也很不错。我没有真正看到从学习SVN会看到的好处。我经历了一段时间,当时我正在为一个新的开源项目评估一些不同的版本控制系统。我尝试了SVN,Bazaar,Git和其他几个工具,并了解了每个工具的基础知识。YMMV,但Git 到目前为止最简单。学习SVN也没有错,但实际上并不会帮助您学习Git。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.