svn和git的区别
1.Git是分布式的,SVN是集中式的
SVN 必须有一个服务器版本库就放在一个中央服务器。所有开发人员都是与服务器进行交互的。
Git 更倾向于分布式开发,每台计算机上都有一个完整的本地版本库,和服务器上的一模一样。所以即使没有网络也一样可以Commit,查看历史版本记录,创建项 目分支等操作。也有中心服务器,仅仅是为了方便交换大家的修改。
附:Git并不是目前第一个或唯一的分布式版本控制系统。还有一些系统,例如Bitkeeper, Mercurial等,也是运行在分布式模式上的。但GIT在这方面做的更好,而且有更多强大的功能特征。
Git每个人的电脑都有完整的版本库,SVN集中式版本控制的中央服务器要是出了问题,所有人都没法干活了,一次需要定期备份,并且是整个SVN都得备份
Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
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的提交过程不会被打断,有冲突会标记冲突文件
小结
svn是所有人修改的都是服务器上的程序,如果有人修改了同样的部分,那就冲突了,而git是开发人员创建自己的分支,这个分支就相当于将源码copy一份在本机上,之后修改的都是本地的代码,可随时拉取服务器的代码进行同步,git可创建无数分支,开发人员只需将自己修改的代码提交就可以了。
- svn是直接与服务器进行交互,git是将项目缓存在本地再推送到服务器。
- svn必须在联网的情况下工作,git可不联网开发。
- svn易冲突,git不易冲突。
- svn旨在项目管理,git旨在代码管理。
- svn适用于多项目并行开发,git适用于单项目开发。
- svn适用于企业内部,由项目经理协调多个项目统筹开发,git适用于通过网络多人开发同一项目。
最后补充一点:git是一个工具,github是一个平台。