兩個不同的倉庫的分支合併

                          不同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' 訪問權限也是能夠解決的

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章