【git操作】如何在兩個git客戶端間同步程式碼

weixin_30924079發表於2020-04-04

問題描述

公司git伺服器因為斷電掛掉了,自己又分別在win與linux兩個環境下進行了程式碼的編寫,現在就是需要將win上編寫的程式碼,合併到linux環境下。

操作方法

通過在網上查詢方法,決定使用git bundle來進行程式碼的合併。

win下生成bundle檔案

首先確定win下需要合併的commit:
git log
這裡我需要將最近的4條commit生成bundle檔案,這裡指定分支為master分支:
git bundle create master_bundle -4 master
就是就生成了buddle檔案。
然後對所生所的bundle檔案進行檢驗:
git bundle verify master_bundle
確認沒有問題之後,將master_bundle檔案拷貝到linux環境下。

linux下應用bundle

將bundle檔案放置到程式碼路徑上一級,進行合併操作:
git fetch ../master_bundle master:master

我在這裡出現了兩個問題:

1、首先需要將程式碼分支切換到其他分支(非所需要的分支,這裡為master),不然會繼續操作報如下的錯誤:

fatal: Refusing to fetch into current branch refs/heads/masters of non-bare repository

2、由於linux下還有其他的提交,導致合併失敗:

! [rejected] master-> master(non-fast-forward)

解決方法是:
首先基於linux環境master提取一個備份分支:
切換到master分支
git checkout master
建立臨時分支
git checkout -b master_tmp
然後將後繼提交的commit撤銷:
git reset --hard commit號
執行上述的合併操作,

[jesse@jesse workspace]$ git fetch ../master_bundle master:master
From ../master_bundle
7cc3597..bcc8870 master -> master

完成之後,再將臨時分支,合併到master分支,如果有衝突,解決衝突:
切換到master分支
git checkout master
合併操作
git merge --no-ff master_tmp

這樣,就可以將win下的程式碼合併到linux下的。

最後的話

git還是非常靈活的工具,自己知道的也是九牛一毛,還需要繼續學習,上述解決問題的方法,應該還是有最優解,以後有時間了,還是要再繼續優化一下。
有問題還是多查git手冊
以後要多寫點部落格記錄下工作與學習,學會分享。
嗯,繼續幹活了。。。

參考連結資料:

git-bundle
git線下傳輸倉庫

轉載於:https://www.cnblogs.com/JesseTsou/p/8907147.html

相關文章