Git和SVN的区别
前几天同事问我多人协作代码管理上的问题,建议他是用分支,目前项目使用的是SVN,因此就想到了Git和SVN的分支有很大区别
那SVN和Git都是有哪些区别呢?
1.Git是分布式的,SVN是集中式的
SVN必须有一个服务器版本库就放在一个中央服务器。所有开发人员都是与服务器进行交互的。
Git更倾向于分布式开发,每台计算机上都有一个完整的本地版本库,和服务器上的一模一样。所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作。也有中心服务器,仅仅是为了方便交换大家的修改。
去中心化的好处?
操作处理速度快
安全性更高。Git每个人的电脑都有完整的版本库,SVN集中式版本控制的中央服务器要是出了问题,所有人都没法干活了,一次需要定期备份,并且是整个SVN都得备份
不依赖网络
2.Git把内容按元数据方式存储,而SVN是按文件
SVN保存前后变化的差异数据
Git只关心文件数据的整体发生变化,更像是把文件做快照,文件没有改变时,分支只想这个文件的指针不会改变,文件发生改变,指针指向新版本
3.Git没有一个全局版本号,而SVN有
SVN版本号进行控制,每次操作都会产生一个高版本号
Git采用40 位长的哈希值作为版本号,没有先后之分
4. Git的内容的完整性要优于SVN
GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏
5.分支不同
Svn 创建分支,其实就是创建了一个新的文件夹(目录)并拥有实际的文件的。相当于拷贝了一份源文件。创建完分支后,影响全部成员,每个人都会拥有这个分支。拉分支相当于copy时间较慢。多分支并行开发较重。
Git可以在任意一个提交点(commit point)开启分支,并没有创建文件夹,你甚至看不到任何的改变。创建一个分支,就是多了一个索引文件,记录这个分支的变化,占用很小的空间。拉分支时间较快,拉分支只是创建文件的指针和HEAD。用户可以在同一个文件夹中,快速的切换不同的分支。每个分支,都是独立的,在这个分支里想做什么都可以,对其他分支没有一点影响。比较适合多分支并行开发。
6.管理权限不同
svn的权限管理相当严格,可以按组、个人针对某个子目录的权限控制
Git没有严格的权限管理控制,只有账号角色划分
7.工作流程不同
SVN每次更改文件之前都得update操作,有冲突,会打断提交动作
Git开始工作前进行fetch操作,完成开发工作后push操作,有冲突解决冲突。git的提交过程不会被打断,有冲突会标记冲突文件