一、Git简介
1.1 项目的版本管理
在项目开发过程中,项目每开发到一个节点就会对当前项目进行备份,这个备份就是项目的一个版本;当我们继续开发一个阶段后,再次进行备份,就生成新的版本——多个版本的集合就是项目的版本库
在项目版本管理中,我们可以使用手动进行管理,但是存在一些问题:
- 需要手动维护版本的更新日志,记录每个版本的变化
- 需要手动查找历史版本,当历史版本比较多的时候,查找工作很繁琐
- 当我们需要回退到某个版本时,只能够手动的通过IDE工具手动打开
1.2 团队协同开发
1.3 版本管理工具—Git
Git是一个开源的分布式版本控制系统,用于敏捷高效的处理任何大小项目的版本管理。
核心功能:
二、Git下载及安装
2.1 下载Git
https://git-scm.com |
---|
|
2.2 安装Git
除了选择安装位置以外,其他都傻瓜式安装
2.3 检查
- win + r
- 输入cmd
- 输入
git --version
三、Git架构
四、Git的基本使用
4.1 创建版本库
- 在工作空间的目录中,右键”Git Bash Here“打开Git终端
- 在Git终端中输入
git init 指令,创建版本库(就是一个.git目录)
4.2 查看版本库状态
git status
4.3 将工作空间的修改添加到暂存区
git add a.txt
git add .
4.4 将暂存区内容提交到版本库(仓库)
git commit -m '版本说明'
4.5 查看版本库中的历史版本
git log
git log --oneline
4.6 设置用户信息
因为我们将暂存区的内容提交到版本时,会记录当前版本的提交的用户信息,因此在版本提交之前需要先绑定用户信息
git config --global user.name "用户名"
git config --global user.email "邮箱"
4.7 同步历史版本到工作空间
git checkout 版本号
五、远程仓库
5.1 远程仓库
远程仓库,远程版本库; 实现版本库的远程存储,以实现团队的协同开发
5.2 如何获得远程仓库?
-
使用GitLab搭建私服 -
远程仓库提供商
- GitHub https://github.com
- Gitee(码云)https://gitee.com
- Coding
5.3 创建远程仓库(码云)
六、远程仓库操作
6.1 push本地仓库到远程仓库
6.1.1 准备工作
-
创建本地工作空间 E:\Java\javademo
src
main
java
resources
test
java
pom.xml
-
初始化本地仓库 git init
-
将工作空间搭建的项目结构add到暂存区 git add .
-
将暂存区文件提交到版本库,生成第一个版本 git commit -m '创建项目'
-
为当前项目创建一个远程仓库 https://gitee.com/***/***.git
6.1.2 本地仓库关联远程仓库
建立E:\Java\javademo中的本地仓库 和 远程仓库https://gitee.com/***/***.git的关联
git remote add origin https://gitee.com/ci-yun/***.git
6.1.3 查看远程仓库状态
git remote -v
6.1.4 将本地仓库push到远程仓库
push到远程仓库需要Gitee的账号和密码
git push origin master
6.2 其他开发者pull远程仓库到本地
其他开发者:123456@qq.com 123456
6.2.1 先创建本地仓库
6.2.2 拉取远程仓库到本地
6.3 解决协同开发冲突问题
场景: HelloWorld.java "bbb"
开发者1:程序员A 开发者2:程序员B
-----------------------------------------------------------------------------------------
git pull origin master git pull origin master
在HelloWorld.java中新增内容 "bbb"
在HelloWorld.java中新增内容 "aaa"
git add .
git commit -m ''
git push origin master
git add .
git commit -m ''
git push origin master
问题:我该如何操作?
git pull origin master
对文件进行冲突合并
git add .
git commit -m ''
git push origin master
HelloWorld.java
>>>>>>>>>>>>>>>>>>>>>>>>HEAD
aaa
=================
bbb
<<<<<<<<<<<<<<<<<<<<<<<< hvsoklghviodshfjghv
七、分支管理
7.1 什么是分支
分支就是版本库中记录版本位置(支线),分支之间相互不影响,使用分支可以对项目起到保护作用
分支就是一条时间线,每次提交就在这条时间线上形成一个版本
7.2 分支特性
- 创建一个新的版本库,默认创建一个主分支—master分支
- 每个分支可以进行单独管理(常规分支、保护分支、只读分支)
- 分支是可以合并的
7.3 分支操作
1.查看分支 git branch
2.创建分支 git branch 分支名称
3.切换分支 git checkout 分支名称
4.检出分支 git checkout 版本号 -b 分支名称
三方合并 快速合并
5.合并分支 git merge 分支名称
6.查看分支及版本试图 git log --oneline --graph
7.4 企业分支模型
八、IDEA整合Git使用
作为Java开发工程师,我们代码的编写工作都是在IDE工具(idea)中完成,因此我们需要了解和掌握直接使用IDE工具完成Git的操作
8.1 IDEA关联Git
8.2 IDEA中Git版本管理
准备工作:打开IDEA新建一个web工程
8.2.1 创建本地版本库
8.2.2 设置忽略文件
在工作空间中有些文件是不需要记录到版本库中的(例如.idea、target、.iml文件),可以通过设置忽略提交来实现
8.2.3 将工作空间add到暂存区
8.2.4 将暂存区提交到版本库
- 选择项目/文件----右键----Git----Commit(记录到版本库的文件----黑色)
- 如果对记录到 版本库的文件进行了修改,也就是说工作空间和版本库不一致----蓝色
8.3 IDEA中Git分支管理
8.3.1 创建分支
-
点击IDEA右下角 Git -
在弹窗中点击 New Branch -
输入新分支的名称
8.3.2 切换分支
- 点击IDEA右下角
Git - 点击非当前分支右边的箭头
- 在选项卡点击
checkout
8.3.3 删除分支
点击右下角Git |
---|
|
8.3.4 合并分支
例如:将dev合并到master
- 切换到master分支
- 点击dev分支右边的箭头,在展开的菜单中选择
Merge into current
8.4 IDEA中使用Git进行团队协同开发
8.4.1 项目管理者
- 完成项目搭建
-
为当前项目创建本地版本库 -
将搭建好的项目提交到本地版本库
- 创建远程版本库(远程仓库)
- https://gitee.com/ci-yun/git-jd.git
- 管理—添加开发者
- 将本地仓库push到远程仓库(master分支——master分支)
- 在远程仓库
checkout as 新建本地 dev 分支(master分支需要进行保护)
- 将本地dev分支push到远程仓库,新建远程仓库的dev分支
- 设置远程仓库中的master分支为保护分支
8.4.2 项目开发者
- 从管理员提供的远程仓库pull项目到本地
- 远程仓库 https://gitee.com/ci-yun/git-jd.git
-
打开项目(此时本地工作空间的项目和远程仓库是同步的) -
开发步骤:
- 选择要修改的文件–pull
- 进行修改操作
- 测试本地修改
- add到暂存区
- commit到本地版本库
- push到远程仓库(dev)
8.5 解决团队协同开发的冲突问题
冲突:在pull之后,push之前被其他开发者push成功
- 选择产生冲突的文件----pull
- 弹出弹窗提示:accpet yours | accpet theirs | Merge
- accpet yours 保留自己的版本(提交时会覆盖其他开发者代码)
- accpet theirs 保留远程仓库上的版本(会导致自己修改的代码丢失)
Merge 手动合并(和其他开发者沟通合并方案)
mages/image-20210527221507263.png) |
-
打开项目(此时本地工作空间的项目和远程仓库是同步的) -
开发步骤:
- 选择要修改的文件–pull
- 进行修改操作
- 测试本地修改
- add到暂存区
- commit到本地版本库
- push到远程仓库(dev)
8.5 解决团队协同开发的冲突问题
冲突:在pull之后,push之前被其他开发者push成功
- 选择产生冲突的文件----pull
- 弹出弹窗提示:accpet yours | accpet theirs | Merge
- accpet yours 保留自己的版本(提交时会覆盖其他开发者代码)
- accpet theirs 保留远程仓库上的版本(会导致自己修改的代码丢失)
Merge 手动合并(和其他开发者沟通合并方案)
|