一、Git简介
1.1 项目的版本管理
在项目开发的过程中,项目每开发到一个关键阶段/节点就会对当前项目进行备份,我们对象项目的每一次备份就是一个版本。
如果在项目版本管理过程中,使用手动进行管理(拷贝备份)会存在一些问题:
- 需要手动维护版本的更新日志,记录每个版本发生的变化;
- 当需要恢复到某个版本时,需要手动查询更新日志,当版本比较多的时候,查找工作就异常繁琐;
- 当我们需要回退到指定的版本时,只能通过手动使用IDE工具打开指定的备份。
1.2 团队协同开发常见问题
在企业项目开发中,通常一个项目是由多个开发者功能协作完成,如果多个开发者分开分别开发自己的功能,最后通过拷贝的形式进行项目整合,步骤繁琐同时很容易导致代码冲突、文件覆盖、代码共享等诸多问题。
- 问题1——整合繁琐:每个程序员各自完成自己的功能开发,最后只能手动进行整合,整合过程繁琐;
- 问题2——代码冲突:每个程序员按照自己的习惯进行类的命名,最终进行整合时可能会出现代码冲突;
- 问题3——代码共享:如果不同程序员之间的代码需要项目调用,不能及时实现代码共享
1.3 Git介绍
基于项目版本的手动管理、团队协同开发进行手动项目整合遇到的诸多问题,Git就应运而生了。
Git是一个
进行项目的版本管理以及团队协同开发管理的
工具
核心功能:项目版本管理、团队协同开发
1.版本管理
2.协同开发
二、Git下载和安装
2.1 下载Git
官网:https://git-scm.com
2.2 安装Git
- 傻瓜式安装
- 可以选择安装目录
2.3 测试
-
打开命令行工具: win+R — 输入cmd
-
输入
git --version
三、Git版本管理
3.1 Git版本管理指令
使用Git管理的项目目录,就是Git的工作空间
-
创建本地版本库
-
在工作空间目录——右键——Git Bash Here——打开Git终端工具
-
在Git终端执行
git init
指令,就会为当前工作空间创建本地版本库(就是工作空间中生成的.git
目录)
-
-
将工作空间中的文件添加到暂存区
# 将工作空间中指定的文件添加到暂存区 git add fileName # 将工作空间中所有的文件添加到暂存区 git add . # 从暂存区移除某个指定的文件 git rm -f fileName # 查看暂存区中的文件状态 git status
-
将暂存区文件提交到本地版本库,生成版本
# -m 用于添加版本更新日志 $ git commit -m '生成初始版本'
-
如果是第一次使用git,需要绑定一个用户名和邮箱
# 绑定用户名 $ git config --global user.name 用户名 # 绑定用户邮箱 $ git config --global user.email 邮箱地址
-
查看本地版本库的历史版本
git log
git log --oneline
-
同步版本库中指定的版本到工作空间
git checkout 版本号
四、Git团队协同开发
4.1 远程版本库
存储在远程服务器上的版本库
4.1.1 搭建远程版本库的途径
- 使用GitLab搭建私服
- 使用第三方提供商提供的公共版本库
- GitHub https://github.com
- Gitee(码云) https://gitee.com
4.1.2 基于码云搭建远程仓库
-
在码云中注册账号:
-
使用注册的账号登录到码云
-
创建远程版本库:https://gitee.com/xxx/xxx.git
(远程仓库名称与项目名保持一致)
-
添加远程版本库开发者
4.2 将本地版本库同步到远程仓库
-
关联远程仓库到本地
git remote add origin https://gitee.com/xxx/xxx.git
-
查看远程仓库的关联信息
$ git remote -v origin https://gitee.com/xxx/xxx.git (fetch) origin https://gitee.com/xxx/xxx.git (push)
-
提交本地版本库到远程仓库(版本存储在仓库中的某个分支,master就是仓库默认的主分支)
# 将本地版本库中的项目版本提交到 origin 对应的远程仓库的 master分支 git push origin master git push https://gitee.com/xxx/xxx.git master
-
如果我们是首次连接远程仓库,需要输入具有远程仓库访问权限的帐号和密码
4.3 从远程仓库拉取版本到本地版本库
-
开发者B创建一个用于存储项目的目录(工作空间)
-
在创建的目录中初始化一个本地版本库
- 在目录中打开Git的终端
- 执行
git init
-
从远程仓库pull项目到本地仓库
git pull https://gitee.com/xxx/xxx.git master
-
如果我们是首次连接远程仓库,需要输入具有远程仓库访问权限的帐号和密码。
4.4 团队协同开发的冲突问题
版本冲突问题:当开发者A在对文件进行修改之后需要
push
的远程仓库,但是在开发者A进行push
操作之后,远程版本库的这个文件被其他开发者修改并成功push
,则就导致在A push当前文件时与远程仓库中的文件产生冲突,开发者A的push
操作就被拒绝。
【开发者A】如何解决冲突:
-
开发者A先执行pull操作,从远程仓库将开发者B修改后的文件下载到开发者A
-
开发者A从远程仓库pull版本会与本地版本进行合并
-
开发者A再重新提交到本地版本库,并push到远程仓库
五、Git分支管理
5.1 什么是分支
分支就是版本库中用于记录版本的位置的支线,使用分支可以对项目的版本起到保护作用
5.2 分支操作
-
创建新分支
git branch new_branch_name
-
查看分支
git branch
-
切换分支
git checkout branch_name
-
合并分支
切换到目标分支,例如我们如果要将test分支合并到master分支,需要先切换到master
git merge branch_name
-
查看分支版本
git log --oneline graph
5.3 分支合并操作
分支合并有2种方式:
- 快速合并:如果两个分支的版本是包含关系,则进行合并操作时会触发快速合并,快速合并不会创建新的版本,而是直接指向被合并的分支版本
- 三方合并:如果两个分支的版本不是包含关系,则进行合并操作时会触发三方合并,三方合并会创建新的版本
5.4 提交本地分支到远程仓库
-
切换到本地对应的分支
-
push分支到远程仓库的指定分支(如果提交的远程仓库中分支不存在,则会新建这个分支)
git push origin dev
六、Idea整合Git使用
在使用Idea进行Java项目开发时,如何使用Git进行项目版本管理和团队协同开发。
6.1 Idea中关联Git配置
6.2 基于Idea的版本管理
-
创建工作空间
- 创建一个Java工程,Java工程根目录就是工作空间
-
创建本地版本库
-
设置版本管理忽略文件(在idea的项目目录中,会生成类似.idea、target、*.iml等和idea本地项目环境相关的文件,这些文件是无需进行版本存储)
-
添加项目/文件到Git暂存区
-
提交版本到本地版本库
-
将本地版本库提交到远程仓库
- 创建远程仓库:https://gitee.com/xxx/demo1.git
- 提交本地版本库到远程仓库
-
如何将远程仓库的代码clone到本地
git clone https://gitee.com/xxx/demo1.git
6.3 使用Git进行团队协同开发
多个开发者共同开发
demo1
项目
6.3.1 管理者
- 创建Java工程,完成项目环境搭建
- 创建本地版本库
- 设置项目中的忽略文件 .gitingore
- target
- .idea
- *.iml
- 将项目提交到本地版本库
- 创建远程仓库
- 将本地版本库push远程仓库
- 在远程仓库中添加开发者
6.3.2 开发者
-
将远程仓库中管理员创建并提交的项目克隆到本地
-
打开工作空间,配置本地环境进行开发
6.3.3 协同开发步骤
- 先pull需要修改的文件
- 执行本地开发和测试
- 完成测试之后提交到版本库并push到远程仓库
6.4 协同开发冲突处理
6.4.1 协同开发为什么会出现冲突
即使所有的开发者都严格按照pull---update---commit---push
的步骤进行开发,当多个开发者同步修改同一个文件的时候依然可能出现版本冲突问题
6.4.2 如何处理冲突
如果本地版本和远程仓库版本冲突,则执行push操作时,会进行如下提示
我们需要处理冲突,点击提示框中的Merge
按钮,会下载远程仓库版本,并提示冲突文件,如下:
选择冲突文件(如上所示只有一个文件冲突),点击Merge...
按钮,会出现如下所示的合并操作界面:
- Your version : 指的是开发者自己本地的文件版本
- Change from server : 指的是从远程仓库下载的的文件版本
- Result :表示本地合并的结果
将自己的本地版本和远程仓库版本进行合并:
冲突文件处理完成之后,再进行push
操作。
6.5 分支管理
6.5.1 创建新分支
-
在idea的右下角点击
Git/master
-
在弹窗中点击
New branch
-
输入新的分支名称
6.5.2 切换分支
-
当我们创建新分支后,工作空间会默认切换到新分支
-
如果我们需要手动切换分支
点击需要切换的分支,右键
Checkout
6.5.3 删除分支
-
不能删除当前工作空间所在的分支,如果要删除当前分支,首先要切换到其他分支
-
点击
Git/master
-
点击要删除的分支后的箭头,点击
Delete
6.5.4 合并分支
将dev 分支 合并到 test分支:
- 切换到test分支
- 点击
test
分支,点击dev
分支后的箭头- 点击
Merge dev into test
6.5.5 提交本地分支到远程仓库
-
切换本地分支
-
git-push
-
会自动在远程仓库创建新分支