一、什么是版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护你的源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时降低人为错误
- 简单说就是用于管理多人协同开发项目的技术。
二、常见的版本控制器
主流的版本控制器有如下这些:(现在影响力最大且使用最广泛的是Git与SVN)
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Micorosoft Visual SourceSafe)
- TFS(Team Foundation Server)
三、版本控制分类
- 本地版本控制
-- 记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。 - 集中版本控制
-- 所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS - 分布式版本控制
-- 所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
四、Git与SVN最主要区别
- SVN是集中式版本控制系统,版本库是集中放在*服务器的,而工作的时候,用的都是自己的电脑,所以首先要从*服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到*服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
- Git是分布式版本控制系统,没有*服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
五、Git的下载安装
打开 git官网,下载git对应操作系统的版本。按照系统的提示默认安装就ok!
六、基本操作命令
cd ---改变目录。
cd .. ---回退到上一个目录,直接cd进入默认目录
pwd --- 显示当前所在的目录路径。
mkdir ---创建文件夹
rm -rf 目录名称 ---删除目录下的所有文件、文件夹
rm -r 文件 ---删除文件
ls ---查看文件
ls -la ---查看文件、隐藏文件
vi 文件名 ---创建并打开文件
a ---编辑模式
ESC ---退出编辑模式
ZZ ---保存
cat filename ---查看文件内容
clear ---清屏
history ---查看命令历史
七、Git核心工作流程
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换。
- Workspace:工作区,就是你平时存放项目代码的地方
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
7.1 git最基本的5个指令:
- git init,初始化,表示即将对当前文件夹进行版本控制。
- git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
- git add 文件名,将指定文件添加到版本库的暂存状态。
- git commit -m '提交信息',将暂存区的文件提交到版本库。
- git log,查看提交记录,即:历史版本记录
7.2 丢弃工作区文件
- git checkout -- filename ,丢弃工作区指定文件内容
- git checkout -- . ,丢弃工作区所有文件内容
7.3 版本回滚操作
- git reset --soft 版本号 ,回滚到指定版本
- git reset 版本号 ,回滚到指定版本
- git reset --hard 版本号 ,回滚到指定版本,将之前的删除(慎用)
- git reflog ,找到所有的历史记录
- git reset HEAD ./filename ,从暂存区回到工作区
7.4 标签操作
- git tag "标签名" ,给最新版本加标签
- git tag "标签名" 版本号 ,给历史版本加标签
- git tag -d "标签名" ,删除标签
- git show "标签名" ,查看标签内容
7.5 分支操作
- git branch 分支名称 创建分支
- git checkout 分支名称 切换分支
- git branch -m 分支名称 创建并切换到指定分支
- git branch 查看所有分支
- git branch -d 分支名称 删除分支
- git merge 分支名称 将指定分支合并到当前分支
7.6 push代码
- git remote add origin https://github.com/wangjifei/pondo.git , 为地址起一个别名origin(仅第一次需要)
- git remote remove origin,取消本地目录下关联的远程库:
- git push origin master , 将本地master分支内容以及版本信息推送到GitHub
7.7 clone代码
- git clone https://github.com/wangjifei/pondo.git ,将项目从GitHub中获取(第一次使用操作)
7.8 拉代码
- git checkout dev ,切换到dev分支
- git pull origin dev , 从远程GitHub仓库获取dev分支最新内容,并合并到本地
【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】
更多详情:
http://www.cnblogs.com/syp172654682/p/7689328.html(细而全,但略显复杂)
https://www.cnblogs.com/wupeiqi/p/7295372.html(简洁生动)