假設(shè)現(xiàn)在已經(jīng)有 sdk1谈截、sdk2的git倉(cāng)庫簸喂。目的是想把兩個(gè)倉(cāng)庫合并成一個(gè),并且保留提交記錄方便日后排查問題喻鳄。
下面是將sdk2合并到sdk1诽表。sdk1保留各種服務(wù)端配置
建議先檢查兩個(gè)sdk的根目錄是否存在同名文件隅肥,即.git文件夾同一目錄下有沒有同名文件 。防止合并過程中泛啸,該目錄下出現(xiàn)同名文件導(dǎo)致沖突秃症。建議最好就是每個(gè)庫先放到自己的一個(gè)文件夾里面先种柑。
打開終端,cd 到sdk1目錄下荠雕,執(zhí)行下面命令,將test2作為sdk1的遠(yuǎn)程倉(cāng)庫炸卑,并且命名為test2
git remote add test2 **path_of_sdk2**
執(zhí)行下面命令盖文,將test2倉(cāng)庫下拉到sdk1
git fetch test2
將test2倉(cāng)庫下載過來的master分支作為新分支checkout到本地,并將新分支設(shè)為test2
git checkout -b test2 test2/master
執(zhí)行完這條命令后洒敏,git環(huán)境可能會(huì)出現(xiàn)一些文件返帕,先不理會(huì)
切換回sdk1倉(cāng)庫的master分支
git checkout master
將test2倉(cāng)庫的master分支合入sdk1倉(cāng)庫的master分支荆萤。如不添加allow-unrelated-histories 參數(shù),可能會(huì)報(bào)fatal: refusing to merge unrelated histories 的異常链韭。
git merge test2 --allow-unrelated-histories
此時(shí),合并可能會(huì)報(bào)沖突踊谋,請(qǐng)把沖突解決之后殖蚕,commit提交合并
執(zhí)行下面命令,將sdk1添加的test2遠(yuǎn)程分支和本地分支刪除
git remote remove test2
git branch -d test2
完畢睦疫。
本地的算做完了蛤育,但是push的時(shí)候遇到一些問題瓦糕。因?yàn)槲覀兒喜⒌臅r(shí)候,里面有很多記錄都是別人的commit咕娄,作者是他們圣勒,而不是我。所以當(dāng)開啟了gerrit的committer和author檢查的時(shí)候,push就會(huì)報(bào)錯(cuò)扳剿。因?yàn)檫@里的提交實(shí)在太多了,最快的解決方法就是把 Forge Author\Forge Committer 這兩個(gè)權(quán)限加上锡搜,然后就可以push到gerrit上了耕餐。
這里補(bǔ)充一些用SourceTree時(shí)候發(fā)現(xiàn)的問題:
1辟狈、如果你在合并前對(duì)庫的文件進(jìn)行了移動(dòng)哼转,合并之后,以前的提交記錄里面的文件仍然是舊的路徑的趟妥。披摄,那么合并之后將會(huì)找不到文件地址(雖然記錄是可以看到的勇凭,但是雙擊不能打開)套像。以后只能依靠庫的相對(duì)路徑去找到這個(gè)文件。
2贞让、移動(dòng)了文件之后喳张,相當(dāng)于重命名了美澳,在看文件的更改記錄的時(shí)候你會(huì)發(fā)現(xiàn)只有一條記錄销部,需要勾選左下角的“跟蹤已重命名文件”才可以看到之前的記錄舅桩。