假设现在已经有 sdk1、sdk2的git仓库。目的是想把两个仓库合并成一个,并且保留提交记录方便日后排查问题。
下面是将sdk2合并到sdk1。sdk1保留各种服务端配置
建议先检查两个sdk的根目录是否存在同名文件,即.git文件夹同一目录下有没有同名文件 。防止合并过程中,该目录下出现同名文件导致冲突。建议最好就是每个库先放到自己的一个文件夹里面先。
打开终端,cd 到sdk1目录下,执行下面命令,将test2作为sdk1的远程仓库,并且命名为test2
git remote add test2 **path_of_sdk2**
执行下面命令,将test2仓库下拉到sdk1
git fetch test2
将test2仓库下载过来的master分支作为新分支checkout到本地,并将新分支设为test2
git checkout -b test2 test2/master
执行完这条命令后,git环境可能会出现一些文件,先不理会
切换回sdk1仓库的master分支
git checkout master
将test2仓库的master分支合入sdk1仓库的master分支。如不添加allow-unrelated-histories 参数,可能会报fatal: refusing to merge unrelated histories 的异常。
git merge test2 --allow-unrelated-histories
此时,合并可能会报冲突,请把冲突解决之后,commit提交合并
执行下面命令,将sdk1添加的test2远程分支和本地分支删除
git remote remove test2
git branch -d test2
完毕。
本地的算做完了,但是push的时候遇到一些问题。因为我们合并的时候,里面有很多记录都是别人的commit,作者是他们,而不是我。所以当开启了gerrit的committer和author检查的时候,push就会报错。因为这里的提交实在太多了,最快的解决方法就是把 Forge Author\Forge Committer 这两个权限加上,然后就可以push到gerrit上了。
这里补充一些用SourceTree时候发现的问题:
1、如果你在合并前对库的文件进行了移动,合并之后,以前的提交记录里面的文件仍然是旧的路径的。,那么合并之后将会找不到文件地址(虽然记录是可以看到的,但是双击不能打开)。以后只能依靠库的相对路径去找到这个文件。
2、移动了文件之后,相当于重命名了,在看文件的更改记录的时候你会发现只有一条记录,需要勾选左下角的“跟踪已重命名文件”才可以看到之前的记录。