使用场景:
手头上有一份RK的android SDK包,里面有详细的git修改记录,并且已经把该SDK包推送到本地服务器上去了,git的代码路径还是保留和RK官方一致,当然RK的SDK包也是和google官方的保持一致
现在RK的SDK包有了更新,要merge到本地服务器,并且保留修改记录
1. 新增文件夹的情况,比如这次RK更新多了external/bluetooth_rtk/bluedroid这个路径
首先把external/bluetooth_rtk/bluedroid scp到本地服务器对应的路径,然后在本地新建external/bluetooth_rtk文件夹,用命令:
git clone ssh://venus/home/git/android/lollipop/platform/external/bluetooth_rtk/bluedroid.git 克隆一份到本地,新建和本地服务器一样的分支git branch ll-rk3288-5.1;
接着git checkout ll-rk3288-5.1; git push origin HEAD:ll-rk3288-5.1 即可提交代码,最后修改.repo/manifest.xml文件新增该分支即可,这样即可保留bluetooth_rtk原来的修改记 录
2. 合并代码的情况,external/sepolicy/目录有代码更新,那么先在RK官方源代码包路径external/sepolicy下用git remote -v查看远程路径:
lsc@lsc:~/newDisk3/RKSDK/rk3288-box/external/sepolicy$ git remote -v
rk ssh://[email protected]/repo/platform/external/sepolicy (fetch)
rk ssh://[email protected]/repo/platform/external/sepolicy (push)
接着git fetch test获取所有分支,选择需要合并的分支,比如我这里的分支是remotes/rk/rk32/mid/5.1/develop,用:
git merge remotes/rk/rk32/mid/5.1/develop即可合并,最后git push origin HEAD:ll-rk3288-5.1提交代码即可
3. 存在问题:
我觉得这样的方法效率太低了,比如Android代码有几百个git分支,不知道那个分支代码是有更新的,现在使用比对工具比对常用的代码路径来更新的
后来想过用repo forall 来更新的,比如repo forall -c "$ REPO_PROJECT"可以获得所有git路径,只要稍加修改就能符合要求了,但是需要合并的RK SDK包的git分支不是同一个,有些目录分支是不一样的。
再个就是需要在线更新,本来我本地已经有一份最新的SDK包了,但是用git remote add test 本地路径 这个方法是不行的,或许用以下几个变量结合能达到效果,但懒得试了
Options:
l -c:后面所带的参数着是shell指令
l -p:在shell指令输出之前列出项目名称
l -v:列出执行shell指令输出的错误信息
additional environment variables:
l REPO_PROJECT:指定项目的名称
l REPO_PATH:指定项目在工作区的相对路径
l REPO_REMOTE:指定项目远程仓库的名称
l REPO_LREV:指定项目最后一次提交服务器仓库对应的哈希值
l REPO_RREV:指定项目在克隆时的指定分支,manifest里的revision属性
我想应该有更好的办法吧,只是我没有找到,否则RK原厂是怎么合并google官方源代码的呢?