大家好,我是IT修真院深圳分院第3期的学员,一枚正直纯洁善良的前端程序员,今天给大家分享一下,修真院官网前端工程师深度思考中的知识点——SVN和Git有什么区别? webstorm怎样配置svn?
一.背景介绍
为什么要说这两款软件的区别?
这两款版本控制软件应该是现在最流行的版本控制软件。我们在做任务做项目的时候,特别强调要学习使用这两款软件。
如果是一个人做项目、任务,很难有机会充分感受到它们的优点和坑点。(git还是能感受到)。
多人合作开发,由于项目的复杂性,一个模块或者一个文件可能需要多人同时编写,这时就能体现出版本控制软件的强大与适用。
无论是有新需求、bug、文件冲突还是安全性等问题,它们都可以很好的协助我们进行解决。
二.知识剖析
简要介绍一下SVN和GIT
细数版本控制软件,多达十几种,像VSS、CVS、ClearCase、PVCS等等这些我这个菜鸡听都没听说过的软件也曾经有过很多用户。
游戏公司用Perforce比较多,似乎是因为在二进制文件的支持和大文件存储上,Perforce占优。
而在开发者眼中似乎只存在SVN和GIT的存在,为什么呢?
因为它们是开源免费的啊!
SVN介绍
SVN是Subversion的简称,是一个开源代码集中的版本控制系统,支持大多数常见的操作系统。作为一个开源的版
本控制系统,Subversion管理着随时间改变的数据。这些数据集中放置在一个中央资料档案库中。这个档案库很像
一个普通的文件服务器,它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历
史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括了程序源码。
集中式代码管理
集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。如果脱离了服务器,开发者基本上可以说是无法工作的。下面举例说明:
开始新一天的工作:
1、从服务器下载项目组最新代码。
2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码)。
3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器.
Git介绍
Git是开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。分布式相比于集中式的最大区别在
于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库.
分布式代码管理
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库服务器。工作的时候,就不需
要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?
比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推
送给对方,就可以互相看到对方的修改了。
三.常见问题
1.SVN和Git有什么区别?
2.webstorm怎样配置svn?
四.解决方案
SVN和Git有什么区别?
1、集中式、分布式
1.1、SVN属于集中化的版本控制系统,有个不太精确的比喻:SVN = 版本控制+ 备份服务器
SVN使用起来有点像是档案仓库的感觉,支持并行读写文件,支持代码的版本化管理,功能包括取出、导入、更新、分支、改名、还原、合并等。Git是一个分布式版本控制系统,操作命令包括:clone,pull,push,branch,merge ,rebase,Git擅长的是程序代码的版本化管理。
1.2、GIT跟SVN一样有自己的集中式版本库或服务器。
但GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上check out代码后会在自己的机器上克隆一个自己的版本库。可以这样说,如果你被困在一个不能连接网络的地方时,你仍然能够提交文件,查看历史版本记录,创建项目分支,对一些人来说,这好像没多大用处,但当你突然遇到没有
2、版本库与工作区
2.1、Subversion的工作区和版本库是截然分开的
Subversion 的工作区和版本库物理上分开:Subversion的版本库和工作区是存储在不同路径下,一般是在不同的主机中,Subversion的企业级部署中,版本库在服务器上,只能通过 https, http, svn 等协议访问,而不能直接被用户接触到。
2.2、Git的工作区和版本库是如影随形的。
Git 的版本库和工作区在同一个目录下,工作区的根目录有一个.git的子目录,这个名为 .git的目录就是版本库本身,它是Git 用来保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。所以千万要小心删除这个文件。
3、分支管理
3.1、SVN,分支是一个完整的目录。且这个目录拥有完整的实际文件。如果工作成员想要开啟新的分支,那将会影响“全世界”!每个人都会拥有和你一样的分支。如果你的分支是用来进行破坏工作(安检测试),那将会像传染病一样,你改一个分支,还得让其他人重新切分支重新下载,十分狗血。
3.2、 Git,每个工作成员可以任意在自己的本地版本库开啟无限个分支。举例:当我想尝试破坏自己的程序(安检测试),并且想保留这些被修改的文件供日后使用, 我可以开一个分支,做我喜欢的事。完全不需担心妨碍其他工作成员。只要我不合并及提交到主要版本库,没有一个工作成员会被影响。等到我不需要这个分支时, 我只要把它从我的本地版本库删除即可。无痛无痒。
3.3、 Git里分支的切换比SVN方便很多。Git的分支名是可以使用不同名字的。例如:我的本地分支名为OK,而在主要版本库的名字其实是master。最值得一提,我可以在Git的任意一个提交点(commit point)开启分支!所以不要吝啬开分支,git开分支的代价很小。(其中一个方法是使用gitk –all 可观察整个提交记录,然后在任意点开啟分支。)
4、权限管理
.Subversion通过对文件目录授权来实现权限管理,子目录默认继承父目录的权限。但是也有缺憾,即权限不能在分支中继承,不能对单个文件授权。例如为 /trunk及其子目录的授权,不能继承到分支或者标签中相应的目录下。
Git 的授权做不到Subversion那样精细。Git的授权模型只能实现非零即壹式的授权,要么拥有全部的写权限,要么没有写权限,要么拥有整个版本库的读权限,要么禁用。
5、存储方式
GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
优缺点比较
SVN优缺点
优点:
1、 管理方便,逻辑明确,符合一般人思维习惯。
2、 易于管理,集中式服务器更能保证安全性。
3、 代码一致性非常高。
4、 适合开发人数不多的项目开发。
缺点:
1、 服务器压力太大,数据库容量暴增。
2、 如果不能连接到服务器上,基本上不可以工作,看上面第二步,如果服务器不能连接上,就不能提交,还原,对比等等。
3、 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
Git优缺点
优点:
1、适合分布式开发,强调个体。
2、公共服务器压力和数据量都不会太大。
3、速度快、灵活。
4、任意两个开发者之间可以很容易的解决冲突。
5、离线工作。 。
缺点:
1、学习周期相对而言比较长。
2、不符合常规思维。
3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
2.webstorm怎样配置svn?
下载安装sliksvn
在webstorm上配置sliksvn
输入svn插件安装的位置
如何checkout代码
根据服务器情况选择svn信息,添加好地址就可以导入项目的版本库了。
SVN服务器地址:
如何提交代码,
在文件上选择右键在弹出来的提示框点击commit,就可以看自己更
改过的文件。
五.编码实战
六.扩展思考
SVN 和 Git 哪个更适用于项目管理?
SVN更适用于项目管理, Git仅适用于代码管理。
一个研发队伍的成员正常包括:需求分析、设计、美工、程序员、测试、实施、运维,每个成员在工作中都有产出物, 包括了文档、设计代码、程序代码,这些都需要按项目集中进行管理的。SVN能清楚的按目录进行分类管理, 使项目组的管理处于有序高效的状态。
七.更多讨论
八.参考文献
参考二:版本控制系统-集中式VS分布式
参考四:为什么很多大企业都在用收费的perforce而不是免费的svn或者git?
参考五:Git 使用规范流程
参考七:话说Svn与Git的区别
参考八:常见的版本控制管理工具
PPT连接:
视频链接
如果这篇文章对你有帮助,并且使你对修真院免费在线学习感兴趣,可以通过我的链接注册成员会,这会使我得到学分(兑换学时)延长学习时间:
邀请链接:http://www.jnshu.com/login/1/13374512
邀请码:13374512