控制版本系统(VCS)
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
集中化控制系统(CVCS)
集中化控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,客户端通过这台服务器获取文件或提交更新.

缺点
很明显,中央服务器是个中心,一旦它出了问题就会影响整个系统.
中央服务器单点故障,如果服务器一挂,那么整个系统就挂了,无法工作
甚至,中央服务器磁盘故障,很可能导致数据丢失,丢失所有历史更改记录等重要信息.
分布式版本控制系统(DVCS)
客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份

Git–控制版本之神
简史
作者,大神 Linus Torvalds
优点:
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许上千个并行开发的分支)
- 完全分布式
- 有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
Git常用命令
config
git config –global
1 | git config --global user.name "alan" |
git config --list 查看配置列表
init
git init用来初始化项目
它会创建一个.git目录,它包含所有初始化git的所有文件
clone
1 | git clone url |
文件的状态
接下去的命令跟

add
untracked===>staged
1 | git add file |
staged===>untracked
1 | git reset HEAD file |
commit
1 | git commit -m "init" |
branch
创建分支
1 | git branch branchname |
PS:当init一个仓库时,master需要先commit一遍才能新建其他分支,否则会得到一个错误
fatal: Not a valid object name:'master'.
切换分支
1 | git checkout branchname |
创建并切换分支
1 | git checkout -b branchname |
查看分支
1 | git branch -r -a -l |
删除分支
1 | git branch -d banchname #删除本地分支 |
远程协作
pull
1 | git pull origin master |
push
1 | git push origin master |
其他
git log
git reflog
git reset
git stash/pop
git help add
….
gitignore
gitflow
iTerm+oh my zsh
Git学习资料推荐
git学习资料太多,但是鱼龙混杂,很多都是抄来抄去,错误百出,这里收集一些优秀的资料.
GitPro2
内容很多,很详细,堪称权威,而且还有中文版,还有pdf等下载,一定要看看.
git-简明指南(很棒)
非常棒的指南,极力推荐
githug
一个git的游戏,现在一共有54个关卡,从init开始,让你在玩的过程中学习git,挺有意思
learnGitBranching
又是一个学习git的游戏,不过这个是针对分支的游戏,非常棒~非常推荐