0%

两个有继承性的git仓库的代码同步

场景:

  1. 两个 Git 仓库, 仓库 A 和仓库 B,其中仓库 B 是从仓库 A 的某个点 Fork 出来的
  2. 经过一段时间两个仓库分别有一些新的改动,需要做同步
  3. 假定同步需求的单向的,从仓库 A 到仓库 B

1. 网页端通过 Merge Request 处理

华为云上代码仓库在 web 页面有”合并请求”标签页

在 Fork 出来的代码仓库里,通过新建合并请求,可选择往母仓库提交合并请求,如下图:

按流程操作后,有两种预期的结果:

  1. 一切正常,合并的代码没有冲突,可以直接+2 合入
  2. 有冲突,需要先解决冲突再合入,如果可以在页面端操作的简单错误,会有提示,当无法在页面处理,则需要采用下方的命令行方式处理

2. 命令行处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 进入目标工程:本例中为仓库B的工程
cd ${仓库B工程}
# 查看当前远端仓库列表
git remote -v
origin git@xxx1.git (fetch)
origin git@xxx1.git (push)

# 添加repoA的远端仓库地址到本工程,命名为repoA
git remote add repoA ${仓库A的git地址}
# 会增加如下远端仓库
repoA git@xxx2.git (fetch)
repoA git@xxx2.git (push)

# 拉取仓库A的远端分支到本地
git featch repoA
# 新建本地分支,基于仓库A的dev分支
git checkout -b A_dev repoA/dev

# 执行合并,从A_dev到origin/dev
git merge origin/dev

# 如有冲突,按如下方式解决
git status .
# 根据列表提示,将有差异的文件,逐个打开处理掉冲突的地方后
git add .
git commit -m '<fix><merge bug fix>'

# 推动到远端
git push origin A_dev

此时可以在页面端,本仓库(仓库 B)内的两个分支之间: A_dev –> dev 提一笔 merge request,因为刚才冲突已全部解决,所以可以很顺畅的完成合并动作。

完成的示意图:

坚持原创技术分享,您的支持将鼓励我继续创作!