一、版本控制系统概述
版本控制系统(VCS):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统,好处:备份、历史记录、记录恢复、多端共享、协同开发等。
企业中主流的版本控制系统:
-
集中式版本控制系统(CVCS),如:SVN
-
分布式版本控制系统(DVCS),如:Git
Git的前世今生
- Linus Torvalds 1991年21岁在Unix操作系统的基础上开发了linux操作系统并开源。早期,linux操作系统的代码由作者手动管理
- 2002年商业公司BitMover为Linux开源社区提供了版本控制系统bitKeeper,可以免费使用
- 2005年linux社区大神破解了bitkeeper版本控制系统,收回了使用权
- 作者用来大概两周的时间完成了git主干开分,大概一个月之后linux源代码全部由git管理
- 2008年,GitHub是Git版本库的托管网站,全球最大的开源社区
- 2018年,微软75亿美金收购了GitHub
二、Git版本控制系统
Git是一个开源的分布式版本控制系统
中文文档: https://git-scm.com/book/zh/v2
环境搭建
-
安装 Git-2.18.0-64-bit.exe
-
配置
注意:建议不将Git的指令添加到系统的环境变量Path中
-
安装完成
工作原理
-
工作区:工作目录(本地目录)
-
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
-
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
总结:
Git工作原理:工作区数据文件 ---->(add
)----> 暂存区中 ----> (commit
) ----> 版本库(只有数据文件真正提交到Git版本库中,git追踪这个数据文件,进行版本控制操作)
基本操作
1)创建版本库
-
init
注意:
.git
目录是Git版本库文件,不要随便修改里面的内容 -
config
- 配置用户名和邮箱是为了唯一标示一个提交者的身份信息
- config操作只需要操作一次
2)添加文本到版本库
add
: 工作区到暂存区
commit
: 暂存区到版本库(强烈要求大家在每次提交时,利用-m
参数指定操作内容注解)
3)修改文件内容并提交到版本库
status
: 操作状态信息的指令
diff
: 比对工作区和版本库中文件差异的
add & commit
4)删除文件
删除文件:
- 真删(删除工作区和版本库的文件)
- 误删(不小心工作区的文件误删了,需要通过版本库中的历史记录 恢复工作区中的数据)
- 只删除版本库中的数据(而不删除工作区的文件)
rm
rm --cache
: 只删除版本库中的历史记录,而不删除工作区的文件
5)版本回退(后悔药)
log
reset
reflog
6)撤销操作
- 撤销暂存区中的数据文件
- 已提交到版本库中的注释重新进行纠正
amend
三、GitHub
全球最大的开源社区,是Git版本库的托管网站
远程版本库的主要作用:
- 本地版本库的远程备份
- 协同开发
1) 注册账号
2) 登陆
3) 创建Repository(远程版本库)
4) 关联本地版本库和远程版本库
git remote add 别名 远程版本库的url地址
5) 日常推送
git push 远程版本库的别名 分支名
6) 远程版本库的克隆
git clone 远程版本库的URL地址
7) 日常拉取
git pull 远程版本库的别名 分支名
8) 团队内的协同开发
9) 团队外的协同开发
分支管理
分支在实际中有什么用呢?比如你的代码已经发布了,然后接到新的需求,你正在开发中,而且周期比较长,
突然收到运行项目出现bug,必须立即修复后发布。那么你就必须创建一个分支,用接到需求之前的代码来修复
bug,修复完成再合并到主干(master)代码中。
1)创建和合并分支
在Git中默认使用主干(master),master是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。
假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
所以Git合并分支也很快!就改改指针,工作区内容也不变!合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:
2)创建并切换分支
git checkout -b dev
3)查看当前分支
注:git branch命令会列出所有分支,当前分支前面会标一个*号
git branch
4) 修改分支并提交
git add readMe.txt
git commit -m "append Hello Dev Branch"
5) 切换到主干
git checkout 分支名
6) 合并 dev 分支代码到主干
# 将dev分支的新功能整合到master分支
# 首先切换到被合并分支(master)
git merge 合并分支名
7) 删除 dev 分支
git branch -D 分支名