版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便回复以前的版本的软件工程技术
- 实现跨区域多人协同开发
- 追踪和记载一个或者多个文件的历史记录
- 组织和保护源代码和文档
- 统计工作量
- 并行开发、提高开发效率
- 跟踪记录整个软件的开发过程
- 减轻开发人员的负担,节省时间,同时减低人为错误
常见的版本控制工具
- Git
- SVN(Subversion)
- CVS(Concurrent Versions System)
- VSS(Microsoft Visual Server)
- TFS(Team Foundation Server)
Git与SVN
SVN:
所有的版本数据都存在服务器上,用户本地只有自己以前所同步的版本,如果不联网的话用户看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且。所有数据都保存在单一服务器上,有很大风险这个服务器会损坏,这样就会丢失所有的数据,当然也可以定期备份
Git:
每个人都拥有全部的代码,安全隐患
所有版本信息仓库全部同步到本地的每个用户,这样就可以子啊本地查看所有版本历史,可以离线在本地提交,只需在联网时push到相应的服务器或其他用户哪里。由于每个yoghurt哪里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,也增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作时,用的是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统必须联网才能工作,对网络带宽要求较高。
Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作时不需要联网,因为版本都在自己电脑上。协同的方法:比如自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,两人之间只需把各自的修改推送给对方就可以互相看到对方的修改了。
Git是目前世界上最先进的分布式版本控制系统
Linux基本指令
- cd:改变目录 (cd …:返回上级目录)
- pwd:显示当前所在的目录路径
- ls(ll):都是列出当前目录中的所有文件,ll列出的内容更为详细
- touch:新建一个文件
- rm:删除一个文件
- mkdir:新建一个目录(文件夹)
- rm -r :删除一个文件夹(rm -r src:删除src文件夹)
- mv:移动文件
- reset:初始化终端
- clear:清屏
- history:查看命令历史
- help:帮助
- exit:退出
- #:表示注释
Git 环境配置
git config --global user.name "mojosang"
git config --global user.email "xxxxxx@xx.com"
Git基本理论
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
- workspace:工作区,平时存放项目代码的地方
- index/stage:暂存区,用于临时存放你的改动,事实上只是一个文件,保存即将提交到文件列表的信息
- repository:仓库区,安全存放数据的位置,有提交到所有版本的数据
- remote:远程仓库,托管代码的服务器
工作流程:
- 在工作目录中添加、修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到git仓库
git管理的文件有三种文件状态:已修改(modified),已暂存(staged),已提交(committed)
仓库创建:
-
创建全新的仓库
git init
仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
-
克隆远程仓库
git clone [url]
将远程服务器上的仓库完全镜像一份至本地
Git文件操作
#查看指定文件状态
git status [filename]
#添加文件到暂存区
git add .
#提交暂存区中的内容到本地仓库 -m:提交信息
git commit -m
忽略文件
- 忽略文件中的空行或以#开始的行
- 使用Linux通配符:*代表任意多个字符,?代表一个字符,[abc]代表可选字符范围,({string1,string2,…})代表可选的字符串等
- 名称前加 ’ ! ’ 表示例外规则,将不被忽略(!lib.txt)
- 名称前有路径分隔符 ’ / ’ 表示仅忽略根目录下的文件,不包括其他目录下的文件
- 名称后面有 ’ / ’ 表示忽略此目录下的所有文件
IDEA集成Git
-
新建项目,把Git目录完全拷贝到IDEA目录下,即可
-
修改文件,使用IDEA操作Git
添加暂存区
commit提交
push到远程仓库
-
提交测试
Git分支
#列出所有本地分支
git branch
#列出所有远程分支
git branch -r
#新建分支,但依旧停留在当前分支
git branch [brancj-name]
#合并指定分支到当前分支
git merge [branch]
#删除远程分支
git branch -d [branch-name]
#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
如果同一个文件在合并分支时都被修改了则会引发冲突:解决方法是在修改冲突文件后重新提交
ranch -d [branch-name]
#删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
如果同一个文件在合并分支时都被修改了则会引发冲突:解决方法是在修改冲突文件后重新提交
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完,如果要发布,或者说分支代码稳定后可以合并到主分支master上来