[TOC]
## SVN
>* 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
* 每个版本库有唯一的URL(官方地址),每个用户都从这个地址获取代码和数据;
* 获取代码的更新,也只能连接到这个唯一的版本库,同步以取得最新数据;
* 提交必须有网络连接(非本地版本库);
* 提交需要授权,如果没有写权限,提交会失败;
* 提交并非每次都能够成功。如果有其他人先于你提交,会提示“改动基于过时的版本,先更新再提交”… 诸如此类;
* 冲突解决是一个提交速度的竞赛:手快者,先提交,平安无事;手慢者,后提交,可能遇到麻烦的冲突解决。
*
## GIT
>* 分布式的版本控制系统
* Git中每个克隆(clone)的版本库都是平等的。你可以从任何一个版本库的克隆来创建属于你自己的版本库,同时你的版本库也可以作为源提供给他人,只要你愿意。
* Git的每一次提取操作,实际上都是一次对代码仓库的完整备份。
* 提交完全在本地完成,无须别人给你授权,你的版本库你作主,并且提交总是会成功。
* 甚至基于旧版本的改动也可以成功提交,提交会基于旧的版本创建一个新的分支。
* Git的提交不会被打断,直到你的工作完全满意了,PUSH给他人或者他人PULL你的版本库,合并会发生在PULL和PUSH过程中,不能自动解决的冲突会提示您手工完成。
* 冲突解决不再像是SVN一样的提交竞赛,而是在需要的时候才进行合并和冲突解决。
* Git 也可以模拟集中式的工作模式
* Git版本库统一放在服务器中
* 可以为 Git 版本库进行授权:谁能创建版本库,谁能向版本库PUSH,谁能够读取(克隆)版本库
* 团队的成员先将服务器的版本库克隆到本地;并经常的从服务器的版本库拉(PULL)最新的更新;
* 团队的成员将自己的改动推(PUSH)到服务器的版本库中,当其他人和版本库同步(PULL)时,会自动获取改变
* Git 的集中式工作模式非常灵活
* 你完全可以在脱离Git服务器所在网络的情况下,如移动办公/出差时,照常使用代码库
* 你只需要在能够接入Git服务器所在网络时,PULL和PUSH即可完成和服务器同步以及提交
* Git提供 rebase 命令,可以让你的改动看起来是基于最新的代码实现的改动
* Git 有更多的工作模式可以选择,远非 Subversion可比
## 具体差异
[SVN与GIT差异](https://www.cnblogs.com/Sungeek/p/9152223.html#sg1)
- 简介
- PHP
- 字符串函数
- 数组函数
- 正则
- 加密函数
- 面向对象
- 关键字
- 设计模式
- 魔术方法
- 机制扩展
- 会话机制
- PHP框架
- laravel
- 问题
- swoole
- easyswoole
- workerman
- 数据库
- Sphinx
- MongoDB
- MemCache
- Redis
- 基础操作
- 数据类型
- 持久化
- 分布式锁
- 内存模型
- redis高级特性
- MySql
- 基础操作
- 数据类型
- 数据表引擎
- 锁机制
- 事务处理
- 存储过程
- 触发器
- 索引
- 关联查询
- 分析SQL语句-优化查询
- 分区分表
- 主从复制
- MySql安全性
- 网络协议
- HTTP
- header详解
- 状态码
- nginx-配置
- 逻辑算法
- 时间和空间复杂度
- 常见算法
- 数据结构
- 核心
- 进程、线程、协程
- 存储容量-计量单位
- 开发软件及配置
- 版本控制器
- Git
- Fidder
- Fidder-Android7
- 自动化部署
- Jenkins
- supervisor
- Elasticsearch
- LogStash
- RabbitMQ
- AB测试
- JAVA-JDK
- FileBeat
- PhpStorm
- Composer
- Linux
- API安全
- 高并发及大流量相关概念
- 网站优化
- WEB
- Electron