目前用的最多的版本控制工具基本就是svn和git了,svn作为集中式版本控制的代表,git作为分布式版本控制的代表。先看下二者的区别:
集中式版本控制需要连接中央服务器,干活的时候先从中央服务器把代码down下来,活干完了(文件的增删改操作),再提交到中央服务器。很多教程诟病只有联网才能使用集中式版本控制,个人感觉有点无病呻吟。在公司开发一般都是局域网,不受联网影响;即便中央服务器布在云端,你也不会一直在断网环境工作吧,最多可能偶尔提交大文件速度慢一些。
分布式版本控制工具是每个干活的机器本地有一套完整的版本库,干完活可以先在本地提交,然后同步到远程仓库。对比下svn,git本地干完活可以直接加入到本地版本控制,如果你发现提交有问题,可以随时撤销回退;如果使用svn,本地干完活要么提交svn,要么只能先保存在本地。其实从操作和最终效果来看,二者区别并不大,git真正比svn强大的地方在于牛叉的分支管理。下面就一起玩玩git:
这里直接安装一下windows版的git,安装完成打开git bash。因为git本地就是一个版本库,所以先在本地玩玩,在本地初始化一个版本库。如图,创建一个目录,并初始化为git库。
接下来的操作就是在这个仓库目录下完成的,下面就不贴图了,git的操作提示清晰明了,顺着往下玩就可以了。
#随时查看当前版本库状态$ git status#创建一个新文件$ vim hello.txt#添加到暂存区,记得随时查看版本库状态$ git add hello.txt#提交到版本库,记得随时查看版本库状态$ git commit -m '创建hello.txt,添加第1行'#提交的时候会提示你设置用户个人信息,缺少--global时只在本仓库生效$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"#再次修改hello.txt,对比差异,记得随时查看版本库状态$ git diff hello.txt#修改完成再次提交时,切记还是两步,先add,再commit$ git add hello.txt$ git commit -m '修改hello.txt,添加第2行'#查看提交记录$ git log$ git log --pretty=oneline#回滚,HEAD指向当前的版本,HEAD^表示上1版本,HEAD^^表示上上版本$ git reset --hard HEAD^#回滚,回滚到指定的commit-id,#分布式版本库每次提交都会生成唯一id(一串数字),不同于svn的整数递增$ git reset --hard ${commit id}#查看每一次操作日志$ git reflog#还原,如果还未加入暂存区,直接还原$ git checkout -- ${file}#还原,如果加入到暂存区,先重置到当前版本HEAD,再还原$ git reset HEAD ${file}$ git checkout -- ${file}
因为git是基于修改来完成版本控制的,所以每次修改都要先add,将修改添加到暂存区,commit提交时只会提交暂存区的东东。HEAD就是一个指向当前版本的指针,当进行回退时,git把HEAD指针指向之前的commit id即可。