Git与GitHub的区别
一.Git与GitHub的区别:
(1).Git是一款软件
,利用它可以对本机的文件进行版本管理。
(2).GitHub是一个商业网站
,可以作为一个Git服务器,通过web界面来进行一些Git执行操作。
可以认为Git与GitHub的关系就如同USB与USBHub的关系。
那么Git和SVN两者之间具体有哪些不同?下面详细做下对比:
一、搞清楚两种模式:集中式VS分布式
集中式版本控制 值得是SVN
分布式版本控制GIT
(1)SVN属于集中式的版本控制系统
集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
SVN的特点概括起来主要由以下几条:
1)每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
2)获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据; 3)提交必须有网络连接(非本地版本库);
4)提交需要授权,如果没有写权限,提交会失败;
5)提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
6)冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。
好处:每个人都可以一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限。
缺点:中央服务器的单点故障。
若是宕机一小时,那么在这一小时内,谁都无法提交更新、还原、对比等,也就无法协同工作。如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。
简单来说,SVN原理上只关心文件内容的具体差异。每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
(2)Git属于分布式的版本控制系统
Git记录版本历史只关心文件数据的整体是否发生变化。Git 不保存文件内容前后变化的差异数据。
实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。
在分布式版本控制系统中,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程。
另外,因为Git在本地磁盘上就保存着所有有关当前项目的历史更新,并且Git中的绝大多数操作都只需要访问本地文件和资源,不用连网,所以处理起来速度飞快。用SVN的话,没有网络或者断开VPN你就无法做任何事情。但用Git的话,就算你在飞机或者火车上,都可以非常愉快地频繁提交更新,等到了有网络的时候再上传到远程的镜像仓库。换作其他版本控制系统,这么做几乎不可能,抑或是非常麻烦。
Git特点:
1)Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
2)Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。
3)提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
4)甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
5)Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。
6)冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。