我们在Android项目的开发过程中,经常遇到源码SDK需要更新的情况。比如厂商会定期更新源码SDK,具体到我们就需要定期将厂商的这些更新代码合并进我们自己的项目中。而我们本地的项目代码因为持续的开发已经变更,此时直接去进行厂商代码的合并将变得困难:
a,代码变更,容易产生合并冲突;
b, Android源码的仓库有一千多个, 合并代码带来的工具量巨大
因此我们希望有一种简单点的代码合并方法。如下代码基线合并的方法供大家参考:
1,在本地Android SDK代码中找出我们开发过程中修改过的仓库。在源码路径执行:
a, repo forall -p -c 'git log --author=关键提交信息' | grep project >modify_branch.txt
b, awk -F[" "] '{print $2}' modify_branch.txt > branch.txt
2, ,确保本地是一个干净的代码。在本地Android源码根目录执行:
repo forall -c "git checkout . && pwd"
注意此步骤会将本地代码的工作区修改代码checkout丢弃。建议合并基线重新拉取一套本地代码专门进行基线的合并工作
3,自动更新除修改仓库(步骤1中)的其他仓库的代码,在源码根目录执行:
repo forall -c "auto_update_branch.sh"
auto_update_branch.sh脚本内容:
#!/bin/bash
SDK_DIR="/media/XXXX" //修改为本地Android源代码的路径
PWD_DIR=`pwd`
Updata_flag=Y
while read rows
do
if [ "$SDK_DIR/$rows" = "$PWD_DIR/" ]
then
echo "not work dir: `pwd`"
Updata_flag=N
fi
done < $SDK_DIR/branch.txt
if [ "$Updata_flag" = "Y" ]
then
echo "work dir: `pwd`"
#git status;sleep 1 //步骤三:清理出合并冲突/失败的仓库,需要手动修改
#git checkout .;sleep 1 //清理代码,会丢弃本地修改
git pull `git remote` SDK_branch;sleep 1 //步骤一:SDK_branch:新代码基线的分支名。拉取新基线代码到本地
#git push `git remote` android-XXX;sleep 1 //步骤二:android-XXX: 远端分支名
fi
自动同步代码的脚本auto_update_branch.sh请拷贝到:/usr/local/bin/auto_update_branch.sh,并添加可执行权限
4,(步骤1中找出来的仓库)开发修改过的仓库,需要手动修改合并。
5,编译和烧写验证,本地代码推送远端服务器。