git版本控制和svn的区别
1.关于版本控制
- 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 一般程序员对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。
2.本地版本控制系统
- 人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
- 最流行的是RCS,它的工作原理是在硬盘上保存补丁集(补丁是指文件修订前后的变化);通过应用所有的补丁,可以重新计算出各个版本的文件内容
缺点: - 无法多人协同工作。
- 变更历史记录被保存在单一位置,有丢失的风险
3.集中式版本控制系统
为了让在不同系统上的开发者协同工作。 于是,集中化的版本控制系统
(Centralized Version Control Systems,简称 CVCS)应运而生。 这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端 连到这台服务器,取出最新的文件或者提交更新。
缺点:
- 中央服务器的单点故障,影响提交更新和协同工作。
- 中心数据库磁盘损坏,恰好没有做备份的话,你将丢失所有数据–包括项目的变更历史
4.分布式版本控制系统
分布式版本控制系统(Distributed Version Control System,简称 DVCS),像Git、Mercurial、Bazaar 以及 Darcs 等。
- 本地完整镜像代码仓库,包括历史变更记录。 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复**。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
-
许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的
5.git的特点
5.1 直接记录快照,而非差异比较
5.2 近乎所有操作都是本地执行
- 因为本地更新的代码是对远程代码的完全镜像,所以变更历史等本地都有,不像svn一样还要联网去比较
5.3 git的完整性
5.4 git一般只往里面添加数据
5.5 三种状态
-
三种状态:已提交(committed)、已修改(modified)、已暂存(staged)
-
三种工作区域:git仓库、工作目录、暂存区域
- Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
- 工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
- 暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。
-
基本的 Git 工作流程如下:
- 1.在工作目录中修改文件。
- 2.暂存文件,将文件的快照放入暂存区域。
- 3.提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。 如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
6.svn和git的区别
- 最大区别就是,git是分布式的,每个去克隆代码的人,都会把代码仓库镜像到本地,避免丢失
- Git 从一个分支向另一个分支合并代码的时候,会把要合并的分支上的所有提交一个一个应用到被合并的分支上,合并后也能看得到整个代码的变更记录。而其他的版本管理工具则不能。
- Git 切换分支的时候通常很快。不像其他版本管理器,每个分支一份拷贝。
- Git 有很多非常有用的命令,让你可以很方便地工作。比如git stash命令,可以把当前没有完成的事先暂存一下,然后去忙别的事。