首页 > 编程知识 正文

gitlab和svn的区别,git和svn哪个好

时间:2023-05-05 13:17:46 阅读:132055 作者:2982

开发中最常用的版本控制工具大致分为两类: git和http://www.Sina.com/(subversion )

svn比较容易理解和使用,与模块化开发思维一致

但是,git在多人共同开发的情况下,其模型和设计更有利于开发中的各种问题

因此,对此,归纳分析svn和git的差异:

Git是分布式的,SVN是集中式的。 这是Git和SVN的最大区别。 如果能把握这个概念的话,两者的区别基本上可以明白大半。 由于Git是分布式的,因此Git支持脱机工作,并且可以在本地执行许多操作,包括即将推出的分支功能。 SVN必须连接到网络才能正常工作。

集中式版本控制系统有一个单一的集中式服务器,用于存储所有文件的修订,协作者通过客户端连接到此服务器,以检索最新文件或提交更新。

svn

每个版本库都有唯一的URL (官方地址),每个用户从该地址获取代码和数据;即使获取了代码更新,也可以连接到此唯一的版本库。 只能同步获取最新数据。提交需要网络连接(非本地版本的库)提交需要批准,如果没有写入权限,提交将失败。提交并不是每次都成功。 如果别人比你先提交,“根据旧版本更改。 请更新后再提交”…等; 解决争端是提交速度的竞争。 手快的人,先交上来,平安无事。 慢的人,以后可能会提交,遇到麻烦的冲突解决。 好处:每个人都可以在一定程度上看到项目中其他人在做什么。 管理员可以轻松管理每个开发人员的权限。

缺点:中心服务器单点故障。

如果停机时间为1小时,则在这一小时内任何人都无法提交更新、恢复、比较等,也无法进行协作。 如果中央服务器上的磁盘出现故障,并且没有备份,或者备份不充分,也有数据丢失的风险。 最糟糕的是,整个项目的所有历史更改记录(客户端提取的部分快照数据除外)都将完全丢失,但这仍然是一个问题,不能保证所有数据都已经提取。

Subversion原理上只关心文件内容的具体差异。 记录哪些文件已更新,哪些行的哪些内容已更新

分布式版本控制系统有一个集中管理服务器,用于存储所有文件的修订。 合作者还会在自己的本地创建一个库,用于存储自己的修改和提交,然后将库提交并更新到服务器库。

Git记录的版本历史记录只关心整个文件数据是否发生了变化。 Git不保存文件内容前后变化的差分数据。

实际上,Git就像将更改的文件作为快照记录在小文件系统中一样。 每次提交更新时,都会概述所有文件的指纹信息,创建文件的快照,并保存此快照的索引。 为了提高性能,如果文件没有更改,Git将不会再次保存,而只连接上次保存的快照。

在分布式版本控制系统中,客户端不仅提取最新版本的文件快照,而且完全镜像原始代码仓库。 这样,即使某台协作服务器发生故障,也可以在随后的某个镜像本地仓库中进行恢复。 可以指定这些系统与几个不同的远程代码仓库进行交互。 这样就可以在同一个项目上,分别与不同工作组的人合作。 可以根据需要设置不同的协作过程。

此外,Git在本地磁盘上存储有关当前项目的所有历史更新,Git中的大多数操作只需要访问本地文件和资源,而不使用网络,因此处理速度很快。 如果使用SVN,则没有互联网或断开VPN,则什么也做不了。 但是,使用Git,即使在飞机上或电车上,也可以非常开心地频繁提交更新,到了有互联网的时候再上传到远程的镜像仓库。 更改为其他版本的控制系统几乎不可能,或者非常麻烦。

Subversion的特点概括起来主要由以下几条:

Git中每个克隆(克隆)的版本库是平等的。 可以通过克隆任何版本库创建自己的版本库。 如果需要,还可以将版本库作为源提供给他人。

Git的所有提取操作实际上是代码仓库的完全备份。

提交完全在当地完成,不需要别人给予许可,你的版本库由你主导,提交总是成功的。

基于早期版本的更改也将成功提交,提交将基于早期版本创建新分支。

在你的工作完全满意之前,Git的提交不会中断。 推送会向他人或他人推送你的版本库。 合并发生在拉式和推式过程中,系统会提示您手动执行无法自动解决的冲突。

冲突解决不是像SVN那样的提交竞赛,而是在需要时进行整合和冲突解决。

Git还可以模拟集中式工作模式

Git版本库已集成到服务器中

可以获得Git版本库的许可证。 谁可以创建版本库,谁可以推送到版本库,谁可以读取(克隆)版本库

团队成员首先本地克隆服务器的版本库,始终从服务器版本更新诱人的枕头(PULL )

团队成员将自己的更改推送(PUSH )到服务器版本库中

中,当其他人和版本库同步(PULL)时,会自动获取改变

Git 的集中式工作模式非常灵活

你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库

你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交

Git提供 rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动

Git 有更多的工作模式可以选择,远非 Subversion可比

Git复杂概念多,SVN简单易上手

所有同时掌握 Git 和 SVN 的开发者都必须承认,Git 的命令实在太多了,日常工作需要掌握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须掌握rebase和merge的区别,fetch和pull的区别等,除此之外,还有cherry-pick,submodule,stash等功能,仅是这些名词听着都很绕。

在易用性这方面,SVN 会好得多,简单易上手,对新手很友好。但是从另外一方面看,Git 命令多意味着功能多,若我们能掌握大部分 Git 的功能,体会到其中的奥妙,会发现再也回不去 SVN 的时代了。

Git分支廉价,SVN分支昂贵

在版本管理里,分支是很常使用的功能。在发布版本前,需要发布分支,进行大需求开发,需要 feature 分支,大团队还会有开发分支,稳定分支等。在大团队开发过程中,常常存在创建分支,切换分支的需求。

Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低。

而且 Git 有本地分支,SVN 无本地分支。在实际开发过程中,经常会遇到有些代码没写完,但是需紧急处理其他问题,若我们使用 Git,便可以创建本地分支存储没写完的代码,待问题处理完后,再回到本地分支继续完成代码。

 

 

Git 核心概念

Git 最核心的一个概念就是工作流。

工作区(Workspace)是电脑中实际的目录。暂存区(Index)类似于缓存区域,临时保存你的改动。仓库区(Repository),分为本地仓库和远程仓库。

从 SVN 切换到 Git,最难理解并且最不能理解的是暂存区和本地仓库。熟练使用 Git 后,会发现这简直是神设计,由于这两者的存在,使许多工作变得易管理。

通常提交代码分为几步:

git add从工作区提交到暂存区git commit从暂存区提交到本地仓库git push或git svn dcommit从本地仓库提交到远程仓库

一般来说,记住以下命令,便可进行日常工作了(图片来源于网络):

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。