Step 1 : 创建新仓库
1.1 在 Gitee 平台上创建一个新的仓库,命名为 conflict-test
Step 2 : 在本地构建项目,并推送至远程仓库
我们需要像架构师一样,把项目搭好架子并推送至远程仓库,为后续开发做好准备工作。
2.1 打开 IDEA 并使用 Maven 搭建一个 Spring Boot 项目
我的项目位于本地 D:\code\java\conflict-test
项目结构如下
conflict-test
│
├── .idea
│ └── ...
│
├── pom.xml
│
├── src
│ └── main
│ ├── java
│ │ ├── controller
│ │ │ └── ConflictTestController.java
│ │ └── ConflictTestApplication.java
│ └── resources
│ └── application.yml
│
└── .gitignore
2.2 完成搭建后,在本地初始化仓库
这一步相当于在命令终端输入 git init 命令。现在项目目录下会出现一个.git文件夹(可以打开资源管理器查看)。
2.3 在项目目录下添加(如果有的话修改).gitignore 文件
### Maven 编译输出目录 ###
target/
### IDEA 配置信息 ###
.idea/
2.4 提交到本地仓库
这一步相当于在命令终端先后输入 git add . 命令和 git commit -m “项目构建” 命令,也就是让 git 将工作区中的所有文件添加到暂存区,然后提交到版本库中。现在本地工作环境中的三个区域的内容保持一致,如下图所示。
2.5 添加远程仓库地址
这一步相当于在命令终端输入 git remote add origin https://gitee.com/lybugproducer/conflict-test.git 命令。此时远程仓库的地址已经注册到本地仓库中,我们可以推送了。由于远程仓库没有提交历史,所以不需要拉取到本地。
2.6 推送到远程仓库
这一步相当于在命令终端输入 git push origin master 命令。此时远程仓库新增了一条推送记录。
Step 3 : 模拟多人开发,制造冲突
我们将搭建好的项目克隆到本地的两个不同目录下,模拟两个人同时进行开发的场景。我们让这两个人的开发内容有重叠部分,从而制造冲突。
3.1 克隆项目到本地的两个不同目录下
程序员 A 进行开发的目录位于 D:\code\java\conflict\conflict-test-a
程序员 B 进行开发的目录位于 D:\code\java\conflict\conflict-test-b
3.2 在两个项目中分别写一些代码,且存在重叠部分,写完后提交到各自的版本库
3.3 程序员 A 先将自己的代码推送到远程仓库
由于此前远程库没有更新,所以 A 在推送操作之前不需要进行拉取操作。
3.4 程序员 B 尝试将自己的代码推送到远程仓库
由于此前 A 将自己的提交记录推送到了远程仓库,而 B 的版本库中并没有这些提交记录,所以 B 的推送操作被拒绝了。因此 B 需要先将远程仓库中的更新抓取到本地,与自己的提交记录进行合并,解决冲突后一并推送至远程仓库。
3.5 使用合并方法合并远程更改
合并有两种策略,一种称为 merge 即“合并”,一种称为 rebase 即“变基”。我们这里使用 merge 策略,相当于在命令提示符窗口中先后输入 git fetch origin master 命令(抓取到本地)以及 git merge 命令(与本地版本库中的提交记录合并)。
正如我们预料到的那样,代码合并出现了冲突。此时,如果你通过命令提示符输入 git status -s 命令,你将会看到未解决的冲突文件被标记为 UU 状态。这里有三个选项:“接受您的更改”、“接受他们的”、“合并”,都是字面意思。
3.6 修改代码,解决冲突,提交合并后的文件
我们对照着本地版本库的最新提交(左侧)和远程仓库的最新提交(右侧),在中间进行取舍及修改,解决冲突合并代码,然后再做一次推送。我们看到远程仓库中出现了一条被命名为 Merge remote-tracking branch ‘origin/master’ 的提交记录。
版权归原作者 苑总 所有, 如有侵权,请联系我们删除。