背景
在软件开发行业,主流存在着两种版本控制工具,git 和 svn,由于svn存在着一些问题,渐渐的现在市面上,git成为了主流,git也成为开发人员必备的基础技能,会不会用git,能不能熟练使用git,也是企业考察的一个重点。
git是linux之父Linus Torvalds (林纳斯·托瓦兹)开发的,据传Linus 只用了两周就开发出了git,并发布了稳定版本,一个月之内,git就已经用于linux的源码的管理了。
2. 版本控制系统的介绍
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
- 代码备份
- 本地代码仓库
- 远程代码仓库
- 版本控制
- 随时切换版本
- 各个版本之间互不干扰
- 协同工作
- 合并代码
- 解决冲突
- 回退代码
- 代码追踪
- 提交记录
- 提交说明
- 代码变动
Git和SVN
svn
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑, 所以首先要从中央服务器下载最新的版本,然后开发,开发完后,需要把自己开发的代码提交到中央服务器。
问题:
- 一旦svn服务器出故障,svn无法切换版本,无法提交(工作中,多版本切换是常态)
- 硬盘损坏,所有版本的代码都丢失,本地不一定有所有版本的代码
- svn合并代码不友好,新手很容易误删别人的代码
git
Git是在2005年,Linux系统的创建者Linus Torvalds 为了帮助全球的开发者,维护Linux系统内核的开发 而开发了自己的开源分布式版本控制工具 。
分为两种类型的仓库:本地仓库和远程仓库。
git完美解决了svn遇到的问题,成为了现在主流的版本控制管理工具。
git 下载安装
下载
官网下载地址:https://git-scm.com/downloads
安装
- 双击安装包,进入安装向导界面
- 一路next
- 等待安装
- 安装完成,点击Finish
说明
-
安装完成后在电脑桌面(也可以是其他目录)点击右键,如果能够看到如下两个菜单则说明Git安装成功。
- Git GUI:Git提供的图形界面工具
- Git Bash:Git提供的命令行工具
-
运行Git命令客户端,使用git --version 命令,可以查看git版本
小知识点:git命令客户端,是linux命令,可以使用它练习一下linux命令,比如
1. cat : 查看文件
2. ll : 文件列表 等同于 ls -l
3. mv: 移动文件到指定目录
4. cp:拷贝文件到指定目录
5. vim:编辑文件
TortoiseGit安装和汉化
一般在工作中还是使用图形化界面多一些。
安装
-
双击安装包,进入安装向导界面
-
一路next
-
选择安装目录
-
安装
-
配置
配置 https://gitee.com/ 上的用户名和账号
5.2 汉化
-
安装中文语言包
TortoiseGit-LanguagePack-2.9.0.0-64bit-zh_CN.msi
-
进入设置
3. 选择中文,点击应用并确认
- 完成
其余Git的图形化界面工具
Sourcetree
小结
- git是工作必备技能,一定要牢牢掌握
- 一般工作中,使用图形化工具比较多一些
- TortoiseGit (小乌龟git)
- sourcetree (有兴趣的可以了解一下,我在使用的)
- idea的git插件 (后面会讲)
- 虽然实际工作中,图形化工具使用较多,但还是要了解git的命令,这样对图形化工具的使用才能得心应手
Git入门
Git工作流程
Git分为本地仓库和远程仓库。
6.1.1 本地仓库
6.1.1.1 工作流程
6.1.1.2 常用命令
6.1.1.3 使用步骤(命令行方式)
步骤:
-
创建工作目录、初始化本地 git 仓库
-
新建一个 test.txt 文件(暂不执行添加操作)
-
使用 status 命令,查看状态
-
使用 add 命令添加,并查看状态
-
使用 commit 命令,提交到本地历史仓库
-
使用 log 命令,查看日志
-
修改 test.txt 文件
-
添加并提交,查看日志
使用步骤(图形化方式)
步骤:
-
创建工作目录、初始化本地 git 仓库
-
新建一个 test.txt 文件(暂不执行添加操作)
-
使用 status 命令,查看状态
-
使用 add 命令添加,并查看状态
-
使用 commit 命令,提交到本地历史仓库
-
使用 log 命令,查看日志
-
修改 test.txt 文件
-
添加并提交,查看日志
6.1.1.5 历史版本切换
在多个提交的版本记录中,可以任意的切换
步骤:
-
查看 my_project 的 log 日志
- 使用 git reflog:可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录的操作)
- 使用 git reflog:可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录的操作)
-
增加一次修改记录
-
将代码切换到第二次修改的版本
- 指令:git reset --hard 版本唯一索引值
6.1.1.6 分支管理
⚫ 分支的使用场景
- 周期较长的模块开发
- 假设你准备开发一个新功能,但是需要一个月才能完成
- 第一周写了20%的代码,突然发现原来已经写好的功能出现了一个严重的Bug
- 那现在就需要放下手中的新功能,去修复Bug
- 但这20%的代码不能舍弃,并且也担心丢失
- 这就需要开启一个新的版本控制。
- 尝试性的模块开发
- 业务人员给我们提出了一个需求
- 经过我们的思考和分析 该需求应该可以使用技术手段进行实现
- 但是我们还不敢确定
- 我们就可以去创建一个分支基于分支进行尝试性开发。
分支在真实工作的场景
- 开发人员从需要添加功能的开发分支上,拉取代码
- 构建自己的分支
- 在自己的分支上进行开发
- 将代码合并到开发分支上
- 由上线人员或者有权限的开发人员,将开发分支合并到对应的上线分支上
- 完成代码上线
使用分支管理可以有效的避免污染主线分支或者上线分支,从而造成一些不必要的麻烦
分支工作流程
由每次提交的代码,串成的一条时间线
- Master是所在分支的名称,一般不可修改
- Head是指向分支的指针
- Dev是另一个分支的名称,可随意定义
- 工作中分支定义:
- Master(主分支,一般用作上线分支)
- Dev(开发分支,又叫做测试分支,开发阶段使用,开发完成并测试完成后,合并到主分支)
- 开发人员分支(开发人员从Dev拉取的分支,用于开发阶段使用,功能开发完成后,合并到Dev分支,供测试人员测试)
- 工作中分支定义:
创建和切换分支
- 创建分支:git branch 分支名,如果不知道如何使用 可以 用 git branch --help 打开说明文档
- 切换分支:git checkout 分支名
总结:不同分支之间的关系是平行的关系,不会相互影响
git branch --list 查看分支列表
合并分支和删除分支
-
合并分支:git merge 分支名
-
切换到master分支
-
将xiaoming 分支合并到master
-
完成合并,查看日志
-
-
-
删除命令:git branch -d 分支名
-
查看分支列表:git branch --list
6.1.2 远程仓库
6.1.2.1 工作流程
远程仓库平台介绍
- Github
- 域名:https://github.com
- 介绍:GitHub是全球最大的开源项目托管平台,俗称大型程序员社区化交友网站 各类好玩有趣的开源项目,只有想不到,没有找不到。
- 码云
- 域名:https://gitee.com
- 介绍:码云是全国最大的开源项目托管平台,良心平台,速度快,提供免费私有库
远程仓库平台操作
操作情况
- 情况1:先有本地项目,远程为空
- 步骤
- 创建本地仓库
- 创建或修改文件,添加(add)文件到暂存区,提交(commit)到本地仓库
- 创建远程仓库
- 推送到远程仓库
- 步骤
- 情况2:先有远程仓库,本地为空
- 步骤
- 将远程仓库的代码,克隆到本地仓库
- 克隆命令:git clone 仓库地址
- 创建新文件,添加并提交到本地仓库
- 推送至远程仓库
- 项目拉取更新 拉取命令:
- git pull 远程仓库名 分支名
- 将远程仓库的代码,克隆到本地仓库
- 步骤
6.1.2.4 创建远程仓库
-
注册码云账号
-
创建仓库
将本地代码推送到远程:
在推送之前,需要先将本地代码和远程仓库代码关联:
- git remote add
<name> <url>
2. 推送 git push<name>
发现报错,git@gittee.com:Permission denied
没有权限。
和远程仓库关联有两种方式:
-
ssh方式
- 使用ssh方式,需要配置SSH公钥
-
http方式
-
使用http方式,不需要配置SSH公钥
-
-
-
使用http方式 会弹出用户密码输入框,输入gitee的账号密码即可,下次可直接使用,git会进行记忆存储
4.
注意:如果是idea项目提交,注意在本地目录添加.gitignore,将不相关的文件,目录等排除在提交之外 -
-
*.iml
.idea/
*.ipr
*.iws
.idea_modules/
target/
*.project
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
注意:在从本地提交项目前,不要在gitee上,编辑文件,并提交,这样会造成本地和远端版本来源不一致,导致无法提交
解决方案是:强制拉取最新的代码,在提交,强制拉取代码命令:git pull origin master --allow-unrelated-histories
创建SSH公钥
使用ssh方式,需要配置SSH公钥
生成SSH公钥步骤 :
-
设置Git账户
- 查看git账户 : git config user.name
- 查看git邮箱:git config user.email
- 设置全局账户名和邮箱: git config --global user.name “账户名” git config --global user.email “邮箱”
- 查看是否生成过SSH公钥 :cd ~/.ssh
-
生成SSH公钥
- 命令: ssh-keygen –t rsa –C “邮箱”
- 命令: ssh-keygen –t rsa –C “邮箱”
-
设置账户公钥
id_rsa.pub 就是公钥
-
查看公钥命令:cat ~/.ssh/id-rsa.pub
-
设置码云账户公钥(在设置里面)
-
-
公钥测试
- 命令:ssh -T git@gitee.com
推送代码到远程仓库
步骤 :
- 为远程仓库的URL(网址),自定义仓库名称
- git remote add 远程名称 远程仓库URL
- 推送
- git push -u 仓库名称 分支名
从远程仓库克隆,拉取
情况2:先有远程仓库,本地为空
-
步骤
-
将远程仓库的代码,克隆到本地仓库
- 克隆命令:git clone 仓库地址(仓库地址 使用ssh地址和http地址都可以)
- 克隆命令:git clone 仓库地址(仓库地址 使用ssh地址和http地址都可以)
-
创建新文件,添加并提交到本地仓库
- git add hello.txt
- git commit -m ‘hello.txt’
-
推送至远程仓库
- git push -u origin master (git push -u 远程仓库名 分支名)
-
项目拉取更新 拉取命令:
- git pull 远程仓库名 分支名
- git pull 远程仓库名 分支名
-
6.1.2.8 解决代码冲突
代码冲突产生的原因:
将test.txt的内容 更改为update count=2
远端test.txt的内容 更改为 update count=3
本地提交:
因为本地代码和远程仓库中的代码不一致,且是同一文件,造成了冲突
如何解决?
-
先使用拉取命令:git pull
-
打开冲突文件test.txt
-
HEAD代表本机版本,17719a0a26a1f29e0ce9b499d7d39a2190b4799c 代表远端版本 中间使用======分隔
-
选择要使用的版本,此时我们选择本机的代码为要最终提交的代码
5. 提交,先git add, 然后 git commit 提交到本地,然后git push 推送到远端
IDEA中使用Git
7.1 关联Git
- File -> Setting
2. Version Control — Git — 指定git.exe存放目录
3. 点击 Test 测试
创建本地仓库并提交代码
-
打开工程
-
创建本地仓库
-
关联git
-
创建.gitignore文件
*.iml .idea/ *.ipr *.iws .idea_modules/ target/ *.project pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties
-
提交代码
- 查看日志
切换版本
使用revert来进行历史版本的切换
在这里插入图片描述
Revert 操作会当成一个新的提交记录 这种回退的好处在于,如果后悔了“回退”这个操作 也可以回退到没有回退之前的版本 因为历史记录还保留提交记录
分支管理
-
创建并切换分支
-
可以切换回master
-
分支合并
master合并dev01的内容
有冲突,点击Merge解决冲突
解决完冲突,点击Apply
4. 分支删除
1.
分支在真实工作的场景
1. 开发人员从需要添加功能的开发分支上,拉取代码
2. 构建自己的分支
3. 在自己的分支上进行开发
4. 将代码合并到开发分支上
5. 由上线人员或者有权限的开发人员,将开发分支合并到对应的上线分支上
6. 完成代码上线
本地推送到远程
- push
- 关联远程仓库
远程克隆到本地
总结
- 可以使用 git 命令 --help 来查看相关的命令文档
- git init :初始化
- git add : 添加要提交的文件
- git commit -m “说明” : 提交到本地
- git push -u <分支名称> : 推送到远程仓库
- git pull <分支名称>: 将远程仓库代码拉取到本地
- git clone 克隆仓库
- git branch --help : 分支管理相关,通过help查看文档
- git branch 分支名 : 创建分支
- git checkout 分支名:切换分支
- git branch --list :分支列表
- 历史版本切换:Revert
- 分支合并
- Merge操作
- 代码冲突
- 解决冲突
- 提交代码
- 合并成功