参考文章
使用一个大git管理整个Android平台源码并且保留repo的同步功能
创建本地仓库
1、进入SDK根目录:
cd rk3566_rk3568
2、清除编译的中间文件
cd u-boot
make distclean
cd …/kernel
make distclean
cd …
make clean
3、RK的软件开发包中包含了很多的git仓库和.gitignore文件,这些会对我们自建的代码仓库有影响,需要先把一些 .git和 .gitignore文件删除,在SDK根目录下创建脚本,rm_git.sh,用于删除SDK中原有的 .git仓库和.gitignore文件,
脚本中不删除以下 .git文件
./.repo/manifests/.git
./.git
./.repo/repo/.git
脚本中不删除以下路径的 .gitignore文件
./.gitignore
./.repo/repo/.gitignore
./u-boot*
./kernel*
编辑脚本
vi rm_git.sh
给脚本执行权限
chmod 777 rm_git.sh
执行脚本
./ rm_git.sh
脚本内容
#!/bin/bash
for filename in `find -L ./ -name '.git' | sort`
do
if [ "$filename" != "./.git" -a "$filename" != "./.repo/manifests/.git" \
-a "$filename" != "./.repo/repo/.git" ]; then
echo "delete $filename"
rm -rf $filename
fi
done
for filename2 in `find -L ./ -name '.gitignore' | sort`
do
if [[ $filename2 != "./.gitignore" && $filename2 != "./.repo/repo/.gitignore"
&& $filename2 != ./u-boot* && $filename2 != ./kernel* ]]; then
echo "delete $filename2"
rm $filename2
fi
done
unset filename
unset filename2
4、将u-boot/.gitignore中的*.elf删除(这只针对rockchip平台)
5、将SDK根目录下的 .git 仓库删除
rm -rf .git
在SDK根目录下创建 .gitignore文件并写入如下内容,#注:/out加/表示只忽略当前目录下的out目录
.repo
/out/
/rockdev/
6、在SDK根目录下创建并初始化git仓库
git init
git add .
git commit -am “首次提交”
7、编译,首次编译会出错
打开报错的Android.bp文件, 将.git相关内容删除或者注释掉后重新编译
hardware/rockchip/libhwjpeg/Android.bp
hardware/rockchip/libmpimmz/Android.bp
8、编译完后执行git status,将漏掉的文件加入根目录下的 .gitignore,
再次 git status 直到只剩下 .gitignore修改
git add -f .
git commit -am “增加.gitignore过滤文件”
9、传到git服务器上
git remote add origin 服务器地址
git push -u origin master
10、下载编译验证是否正常
cd
mkdir SDK_test
cd SDK_test
git clone 服务器地址
当自己的代码仓库需要和原厂同步时
思路:在上文的仓库的基础上创建一个分支,由于 .repo文件并没有没有删除,执行repo sync后,SDK会重新生成很多.git 和 .gitignore, 执行 rm_git.sh,删除掉新生成的 .git和 .gitignore文件,然后提交,最后合并到主分支,有冲突就解决冲突
创建一个新的分支
git checkout baseline
repo sync
git add -A
git commit -m “xxx”
然后同步更新到主分支:
git checkout master
//将代码合并到主分支
git merge baseline
//解决冲突
……
//提交合并
git commit