不同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 <[email protected]>
Date: Fri Sep 2 13:44:11 2016 +0100
Update version for v2.7.0 release
Signed-off-by: Peter Maydell <[email protected]>
而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 <[email protected]>
Fri, 2 Sep 2016 20:44:11 +0800 (13:44 +0100)
committer Peter Maydell <[email protected]>
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' 訪問權限也是能夠解決的