1. 版本控制
版本控制(Revision Control)用于在开发过程中管理文件修改历史,方便查看和备份。
它的作用如下:
- 实现跨区域多人协同开发。
- 追踪和记载一个或者多个文件的历史记录。
- 组织和保护你的源代码和文档。
- 统计工作量。
- 并行开发、提高开发效率。
- 跟踪记录整个软件的开发过程。
- 减轻开发人员的负担,节省时间,同时降低人为错误。
简而言之就是用于管理多人协同开发的技术。
1.1Git 与 SVN 区别
SVN 是集中式版本控制系统,版本库是放在中央服务器的。
工作的时候,首先要从中央服务器得到最新的版本,完成工作后,需要把自己的代码推送到中央服务器。集中式版本控制系统是必须联网才能工作,且对网络带宽要求较高。
Git 是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库。
工作的时候不需要联网,因为版本都在自己电脑上。待有网络后,把本地的版本推送到远程即可。
1.2 Git工作流程图
命令如下:
clone(克隆): 从远程仓库中克隆代码到本地仓库
checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
add(添加): 在提交前先将代码提交到暂存区
commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge
push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库
2. Git的下载与安装
本教程里的git命令例子都是在Git Bash中演示的,会用到一些基本的linux命令,在此为大家提前列举:
ls/ll 查看当前目录 ll是查看当前文件夹下的所有文件,包括隐藏文件
cat 查看文件内容
touch 创建文件
vi vi编辑器(使用vi编辑器是为了方便展示效果,学员可以记事本、editPlus、notPad++等其它编辑器)
2.1 下载
方式一:打开 Git 官网,点击 Download for Windows(由于国内网络限制,一般下载会很缓慢)。
方式二:国内可以使用 淘宝镜像下载 或者 华为镜像下载(其他的国外资源也都可以在这两个镜像下载)。
2.2 安装
2.2.1、傻瓜式安装一路下一步
3 Git的启动
备注:
Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具
3.1 配置
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息
Git版本控制要记录哪个人什么时候做了什么事情,Git就是通过邮箱去辨识是哪个人的
所有的配置文件,其实都保存在本地。
Git\etc\gitconfig:Git 安装目录下的 gitconfig,存储系统级配置。
C:\Users\Administrator.gitconfig:用户目录下的 gitconfig,只适用于当前登录用户的配置。
当安装 Git 后首先要做的事情是设置用户名称和邮箱地址。每次 Git 提交都会使用该信息,它会被永远的嵌入到操作记录中。
git config --global user.name "用户名"
git config --global user.email "邮箱地址"
--global
参数为全局配置,Git 将总是会使用该配置来处理用户在系统中所做的一切操作。如果希望在特定项目中使用不同的用户名或邮箱,可以在该项目中运行该命令不加 --global
参数。
以上操作也可以通过编辑 C:\Users\用户名.gitconfig 文件来实现,效果完全一致。
3.2 查看配置信息
git config --global user.name
git config --global user.email
4 Git理论知识
4.1 四个区域
Git 本地有 3 个工作区域
工作目录(Workspace):存放项目代码的地方。
缓存区(Stage):存放临时的改动,事实上它只是一个文件,保存即将提交到文件列表信息。
资源库(Repository):安全存放数据的位置,这里面有提交到所有版本的数据。其中 HEAD 指向最新放入仓库的版本。
Git 远程有 1 个工作区域
远程库(Remote):托管代码的服务器,可以简单的认为是项目组中的一台电脑,用于远程数据交换。
文件在这四个区域之间的转换关系如下:
5. 仓库搭建
5.1 搭建本地仓库
要使用Git对我们的代码进行版本控制,首先需要获得本地仓库
1)在电脑的任意位置创建一个空目录(例如test)
作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash
窗口
3)执行命令git init
4)如果创建成功后可在文件夹下看到隐藏的.git
目录。
5.2 克隆远程仓库
我们还可以克隆创建好的远程仓库到本地仓库,这种方式是将远程服务器上的仓库完全镜像一份至本地,就像克隆,所以使用 git clone
。
git clone +仓库地址
5.3 本地项目上传到远程仓库
大家可以看这篇文章 如何将本地文件上传到Gitee
6. 基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git
的命令而发生变化。
6.1 查看修改的状态(status)
- 作用:查看的修改的状态(暂存区、工作区)
- 命令形式:git status
6.2 添加工作区到暂存区(add)
- 作用:添加工作区一个或多个文件的修改到暂存区
- 命令形式:git add 单个文件名|通配符
- 将所有修改加入暂存区:git add .
6.3 提交暂存区到本地仓库(commit)
- 作用:提交暂存区汇总所有内容到本地仓库的当前分支
- 命令形式:git commit -m ‘注释内容’
提交时候添加的备注会被放到日志中
提交完后显示缓冲区没有东西可以提交了
6.4 版本回退
撤回到之前的某个操作,他回去删除我们撤回到位置之后的版本
作用:版本切换
命令形式:git reset --hard commitID
commitID 可以使用 git-log 或 git log 指令查看
如何查看已经删除的记录?
git reflog
这个指令可以看到已经删除的提交记录
我们可以在reflog里面知道删除文件的id,我们可以直接使用命令git reset --hard commitID 还原
所以git reset --hard commitID
既可以做版本回退,也可以做版本还原
6.5 忽略文件
有时候我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件、设计文件等。
在主目录下建立 .gitignore 文件,此文件有如下规则
- 忽略文件中的空行或以 # 开始的行代表注释行,将会被忽略。
- 可以使用 Linux 通配符。例如:* 代表任意多个字符,? 代表一个字符,[ ] 代表可选字符范围,{ } 代表可选的字符串。
- 如果名称的最前面有一个 !,表示例外规则,将不被忽略。
- 如果名称的最前面是一个 /,表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个 /,表示要忽略的是此目录下的所有文件。
*.txt # 忽略所有 .txt 结尾的文件,这样的话上传就不会被选中。
!lib.txt # lib.txt 除外
/temp # 仅忽略项目根目录下的 temp 文件,不包括其它 temp 目录。
build/ # 忽略 build/ 目录下的所有文件。
doc/*.txt # 忽略 doc/notes.txt 但不包括 doc/server/arch.txt。
7.分支
7.1 概述
分支用于管理不同的线路的版本内容。类似于科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那就没什么影响;如果在某个时间点,两个平行宇宙合并了,就需要处理一些问题了。
7.2 命令
- 列出所有本地分支:
git branch
*号表示所在的分支
- 列出所有远程分支:
git branch -r
- 新建分支
新建本地分支并停留:
git branch 分支名
新建本地分支并切换:
git checkout -b 分支名
新建远程分支:
git push origin 远程分支名:本地分支名
建议两个分支同名,方便管理。
7.3合并分支
合并本地分支到当前分支:
git merge 分支名
合并远程分支到当前分支则加上 origin/
:
git merge origin/分支名
删除本地分支:
git branch -d 分支名
删除远程分支:
git branch -dr [remote/branch]
或者
git push origin --delete [branch-name]
7.4 冲突解决
如果同一个文件在合并分支时本地和远程都修改了则会引起冲突。解决的办法是修改冲突文件后重新提交。这里就要做出选择,保留别人的代码还是自己的代码还是综合各自的代码。
master 作为主分支应该非常稳定,用来发布新版本,一般情况下只允许合并,不允许修改。开发工作一般情况下从 master 上新建 dev 分支进行开发,开发完成后,如需上线发布,dev 分支代码再合并到 master 分支上来。
8 在Idea中使用Git
8.1 在Idea中配置Git
安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选项:
点击Test按钮,现在执行成功,配置完成
8.2 在Idea中操作Git
场景:本地已经有一个项目,但是并不是git项目,我们需要将这个放到码云的仓库里,和其他开发人员继续一起协作开发。
8.2.1 创建项目远程仓库
8.2.2 初始化本地仓库(将当前项目初始化为仓库)
在idea中创建文件的时候,它会询问你是否要将文件添加到git中,修改文件的时候,idea会自动帮我们去add,我们只需要去commit就好了
此时我们的项目目录就变成了一个本地仓库
绿色的文件代表已添加到git中
爆红的文件没有被添加到git当中,被Git识别为冲突文件
灰色的文件代表已忽略的文件,可以在gitignore文件中配置
8.2.3 设置远程仓库
远程仓库名默认为origin
8.2.4 提交到本地仓库
8.2.5 推送到远程仓库
在将本地仓库的修改推送到git远程仓库的时候,我们要先pull,先拿到此时远程仓库的版本信息,再去此版本信息上修改
8.2.7 克隆远程仓库到本地
8.2.8 创建分支
- 最常规的方式
- 最强大的的方式