不同git仓库分支合并
过程记录
背景介绍:这两个分支都是基于主分支的某个commit点
比如我的qemu仓库里的kvm-dev-2.7分支 是基于 commit 1dc33ed90bf1fe1c2014dffa0d9e863c520d953a 属于刚创建的分支
信息如下
我的qemu-2.7.0仓库中的kvm-dev分支也是从主分支的 commit 1dc33ed90bf1fe1c2014dffa0d9e863c520d953a 拉出来的
[root@other qemu]$ git checkout -b kvm-dev-2.7 remotes/origin/kvm-dev-2.7
分支 kvm-dev-2.7 设置为跟踪来自 origin 的远程分支 kvm-dev-2.7。
切换到一个新分支 'kvm-dev-2.7'
[root@other qemu]$ git log
commit 1dc33ed90bf1fe1c2014dffa0d9e863c520d953a
Author: Peter Maydell <peter.maydell@linaro.org>
Date: Fri Sep 2 13:44:11 2016 +0100
Update version for v2.7.0 release
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
而qemu2.7.0仓库kvm-dev这个分支也是从commit 1dc33ed90bf1fe1c2014dffa0d9e863c520d953a 这个点慢慢发展而来
现在要将 qemu-2.7.0 仓库里的kvm-dev分支 合并到 qemu仓库里的分支remotes/origin/kvm-dev-2.7分支
以下是查到主线要以此commit点进行合并
Update version for v2.7.0 release v2.7.0
author Peter Maydell <peter.maydell@linaro.org>
Fri, 2 Sep 2016 20:44:11 +0800 (13:44 +0100)
committer Peter Maydell <peter.maydell@linaro.org>
Fri, 2 Sep 2016 20:44:11 +0800 (13:44 +0100)
commit 1dc33ed90bf1fe1c2014dffa0d9e863c520d953a 是我在新仓库以此为commit点(把另一个仓库从这个点开始合入)
tree e8d23d84cbd2577d9f2b1fdabfbd49fa6e5e0e15 tree | snapshot
parent 12d2c4184c5ab60be3428b2bdea5ae66e8d5d960
两个不同仓库的分支合并参考链接 https://blog.csdn.net/gouboft/article/details/8450696
准备工作
qemu qemu2.7.0仓库分支合并
建立一个merge_git目录
mkdir -p ~/merge_git
cd ~/merge_git
分别下载qemu2.7.0 和 qemu仓库 到merge_git仓库
git clone qemu-2.7.0 (仓库地址)
git clone qemu(仓库地址)
[root@other merge_git]$ ls
qemu qemu-2.7.0
[root@other qemu-2.7.0]$ git branch -a
* kvm-dev
master
remotes/origin/HEAD -> origin/master
remotes/origin/kvm-dev
remotes/origin/master
[root@other qemu]$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/kvm-dev-2.7
remotes/origin/master
将 qemu-2.7.0 仓库里的kvm-dev分支 合并到 qemu仓库里的分支remotes/origin/kvm-dev-2.7
[root@other merge_git]cd qemu
第一步 qemu-2.7.0作为远程仓库,添加到qemu中,设置别名为other
[root@other qemu]$ git remote add other qemu-2.7.0仓库地址
第二步 从qemu-2.7.0仓库中抓取数据到本仓库
[root@other qemu]$ git fetch other
remote: Counting objects: 20237, done
remote: Finding sources: 100% (18364/18364)
remote: Total 18364 (delta 13868), reused 17910 (delta 13868)
接收对象中: 100% (18364/18364), 25.37 MiB | 5.39 MiB/s, 完成.
处理 delta 中: 100% (13868/13868), 完成 1057 个本地对象.
来自 ssh://gerrit.loongnix.org:29418/kernel/qemu-2.7.0
* [新分支] kvm-dev -> other/kvm-dev
* [新分支] master -> other/master
第三步 查看获取other 数据之后本地仓库的分支
[root@other qemu]$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/kvm-dev-2.7
remotes/origin/master
remotes/other/kvm-dev
remotes/other/master
注意到 多了 remotes/other/kvm-dev remotes/other/master 这正是我们想要的结果
第四步:将qemu-2.7.0仓库抓去的kvm-dev分支作为新分支checkout到本地,新分支名设定为qemu-2.7.0(qemu-2.7.0仓库名字和新分支名字同名了)
[root@other qemu]$ git checkout -b qemu-2.7.0 other/kvm-dev
分支 qemu-2.7.0 设置为跟踪来自 other 的远程分支 kvm-dev。
切换到一个新分支 'qemu-2.7.0'
第五步:在本地创建基于分支remotes/origin/kvm-dev-2.7 的本地分支 lkvm-dev-2.7 且要并切到该分支
[root@other qemu]$ git checkout -b lkvm-dev-2.7 remotes/origin/kvm-dev-2.7
分支 kvm-dev-2.7 设置为跟踪来自 origin 的远程分支 kvm-dev-2.7。
切换到一个新分支 'kvm-dev-2.7'。
第六步 将qemu-2.7.0合并入kvm-dev-2.7分支 效果如下
[root@other qemu]$ git merge qemu-2.7.0
更新 1dc33ed..21c0fa2
Fast-forward
Makefile | 4 +-
compile.sh | 1 +
configure | 8 +-
..
会显示一些修改提交信息
第七步:查看log,所有log都在,是我们想要的结果
[root@other qemu]$ git log
...能看到所有提交的信息都合并过来了
第八步:push 到远程remotes/origin/kvm-dev-2.7 完毕
git push origin lkvm-dev-2.7:kvm-dev-2.7
命令简写
[root@other qemu]$ git remote add other qemu-2.7.0仓库地址
[root@other qemu]$ git fetch other
[root@other qemu]$ git branch -a
[root@other qemu]$ git checkout -b lkvm-dev-2.7 other/kvm-dev-2.7
[root@other qemu]$ git checkout -b kvm-dev-2.7 remotes/origin/kvm-dev-2.7
[root@other qemu]$ git merge lkvm-dev-2.7
本地分支 远程分支
git push origin lkvm-dev-2.7:kvm-dev-2.7^C
在此过程中遇到一个问题
本地分支名: 远程分支名
[root@other qemu]$ git push origin lkvm-dev-2.7:kvm-dev-2.7
对象计数中: 3, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 609 bytes | 0 bytes/s, 完成.
Total 3 (delta 1), reused 3 (delta 1)
remote: Resolving deltas: 100% (1/1)
remote: Branch refs/heads/kvm-dev-2.7:
remote: You are not allowed to perform this operation.
remote: To push into this reference you need 'Push' rights.
remote: User: other
remote: Please read the documentation and contact an administrator
remote: if you feel the configuration is incorrect
remote: Processing changes: refs: 1, done
To ssh://*******/qemu//git 地址
! [remote rejected] lkvm-dev-2.7 -> kvm-dev-2.7 (prohibited by Gerrit)
error: 无法推送一些引用到 To ssh://*******/qemu//git 地址
[root@other qemu]$ git push origin ls3a-sim:kvm-ls3a-sim-2.7
此时修改gerrit权限
解决办法:
在Gerrit里面进行配置,配置 'Forge Committer' 和 'Forge Author' 访问权限也是能够解决的