项目场景:
项目用git 管理的android系统代码(整个android源码是一个git工程,这点与现在android代码管理方式不一致),不同客户定制化的项目若修改了相关文件会拷贝一份到CUSTOMER目录修改,编译时再检查再拷贝会原来的目录覆盖后编译。
问题描述
有时修改了基类文件,可能会忽略客户定制项目是否有过修改。此时需要一个方法去判断客户定制的项目中是否有改过相关文件。
根据该需求,写了一个shell脚本,会判断此次修改了那些文件,然后对比客户项目目录下是否修改多相关文件。
大致思路是
- 将git status 的结果输出到gitStatus.log 文件下;
- 然后用grep抓取包含modified的行,并解析出对应文件路径存放到 gitFile.log 中;
- 遍历gitFile.log的每一行,然后看在客户目录中是否能找到对应文件,并打印结果。这样就不用手动一个个去看是否有改冲突的文件了。
解决方案:
大致代码如下:
#!/bin/sh
DIFF_FILE=gitFile.log
PROJECT=packages/apps
##此处对应客户项目代码路径 ##
TARGET_PATH=customer
if [ $# -eq 1 ];
then
echo "为防止比较整个工程慢,请输入要比较的工程路径: $1"
else
echo "参数错误"
exit
fi
PROJECT=$1
git status ${PROJECT} > gitStatus.log
grep -rn modified gitStatus.log | awk '{print $3}' > ${DIFF_FILE}
while read line
do
echo "\n ${line}"
FILENAME=`basename ${line}`
echo "fileName: $FILENAME"
RES=$(find $TARGET_PATH -name $FILENAME)
for r in $RES
do
echo "********* may confilt path: $r"
done;
done < ${DIFF_FILE}