发表于: 2019-10-03 23:44:16
1 724
今日完成的事
开始制作复盘
明日计划的事
完成登录,管理主页
收获
我们复盘使用的是svn,和之前任务中使用的git有很大的不同,
存储方式不一样
Git按照元数据的方式将文件的一个版本存入了一个类似与K/V数据库,而SVN是按照文件的方式进行一个存储。Git的内部有一个类似于K/V的数据库,我把他理解为是一个Map<K,V>,我们将内容存储到Git的数据库内后,Git会返回一个Key给我们,这个Key是唯一的(把一模一样的内容上传进去,这个key也是唯一的)。
使用方式不一样
从本地把文件推送到远程服务,SVN只需要commit而Git需要add、commit、push三个步骤。
使用SVN开发者只要把文件修改了,只要commit其他开发人员就可以直接checkout下来。
但是Git就不相同了,Git如果要从本地将修改后的文件提交进入远程仓库再从远程仓库将其他开发者修改后的文件checkout下来需要以下几个步骤:
1、首先把修改后的文件通过add添加到我们的暂存区;
2、然后通过commit命令将暂存区的文件提交到本地仓库;
3、最后通过push命令将本地仓库的文件存入到远程仓库;
4、要通过clone命令将远程仓库的文件拉到本地仓库;
5、最后通过checkout将本地仓库的内容取出来;
管理模式不一样
Git是一个分布式的管理系统,而SVN是远程集中式的管理系统。
如果说SVN的远程仓库挂掉了,那我的本地项目再也不能做提交,也不能做分支的切换,也不能够干和版本管理相关的任何事情,这就是集中式管理的缺陷了。
在项目内有一个Git仓库,也就是说在本地一个项目包含一个完整Git仓库,Git仓库是在项目内的,远程仓库能干的事情本地的Git仓库也能干。本地仓库和远程仓库通过四种主要传输协议相关联(本地协议、Http协议、SSH协议、Git协议)。Git还支持远程仓库里面的多个远程仓库。
还有就是
SVN: 集中式的版本控制,必须依赖中央服务器才能实现 提交,更新 操作
一旦断网,所有机器都不能提交 更新代码
GIT:分布式版本控制,每一台机器都能当做一个中央服务器,即使断网也能提交,更新,没有网络不能远程更新代码而已但不影响正常工作
区别: GIT有本地版本库(个人更新 提交),远程版本库(多人协作更新代码用途) 概念
SVN 仅仅只有远程版本库(一旦断网,多人不能协作)概念.
优缺点
SVN 的优缺点
SVN对中文支持好,操作简单,使用没有难度,美工人员,产品人员,测试人员,实施人员都可轻松上手。使用界面统一,功能完善,操作方便。
Git的优缺点
对程序源代码进行差异化的版本管理,代码库占极少的空间。易于代码的分支化管理。不支持中文,图形界面支持差,使用难度大。不易推广。
适用范围
1)适用对象不同。Git适用于参与开源项目的开发者。他们由于水平高,更在乎的是效率而不是易用性。SVN则不同,它适合普通的公司开发团队。使用起来更加容易。
2)使用的场合不同。Git适用于通过Internet,有多个开发角色的单个项目开发,SVN适合企业内部由项目经理统一协调的多个并行项目的开发。
3)权限管理策略不同。Git没有严格的权限管理控制,只要有帐号,就可以导出、导入代码,甚至执行回退操作。SVN则有严格的权限管理,可以按组、按个人进行针对某个子目录的权限控制。区分读、写权限。更严格的,不支持回退操作。保证代码永远可以追踪。
4)分支(branch)的使用范围不一样。Git中,你只能针对整个仓库作branch,而且一旦删除,便无法恢复。而SVN中,branch可以针对任何子目录,它本质上是一个拷贝操作。所以,可以建立非常多、层次性的branch,并且,在不需要时将其删除,而以后需要时只要checkout老的SVN版本就可以了。
5)基于第三点,Git适用于单纯的软件项目,典型的就是一些开源项目,比如Linux内核、busybox等。相反,SVN擅长多项目管理。比如,你可以在一个SVN仓库中存放一个手机项目的bsp/设计文档/文件系统/应用程序/自动化编译脚本,或者在一个SVN中存放5款手机项目的文件系统。git中必须建立n(项目数)*m(组件数)个仓库。SVN中只需要最多n或者m个就可以了。
6)Git使用128位ID作为版本号,而且checkout时要注明是哪个branch,而SVN使用一个递增的序列号作为全局唯一的版本号,更加简明易懂。虽然可以使用gittag来建立一些文字化的别名,但是毕竟那只是针对特殊版本。
7)可跟踪性,git的典型开发过程为:建立分支,进行开发,提交到本地master,删除分支。这样做的后果是以前的修改细节会丢失。而在SVN下做同样的事情,不会丢失任何细节。这里是一个有趣的链接,表明了git下典型的工作方式:(以master为核心,不断创建新branch,删除旧branch):
8)局部更新,局部还原。SVN由于是在每个文件夹建立一个.svn文件夹来实现管理,所以可以很简单实现局部更新或者还原。假如你只希望更新某些部分,则svn可以很好实现。同时代码写错了,同时可以很好实现局部还原,当然git也可以通过历史版本还原,但是无法简单地实现局部还原。
SVN属于集中化的版本控制系统
这种做法带来了许多好处,特别是相较于老式的本地VCS来说。现在,每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。
事分两面,有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。
Subversion原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
Subversion的特点概括起来主要由以下几条:
1.每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
2.获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
3.提交必须有网络连接(非本地版本库);
4.提交需要授权,如果没有写权限,提交会失败;
5.提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
6冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。
评论