git判断修改的基类文件是否与定制项目冲突

该博客介绍了如何通过Shell脚本来解决在管理Android源码时遇到的问题。当基类文件被修改时,可能与客户定制项目的修改产生冲突。作者提供了一个脚本,首先记录git的修改状态,然后筛选出被修改的文件,接着遍历这些文件,检查客户目录中是否存在相同文件,从而快速定位可能的冲突路径,避免手动检查的繁琐过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

项目用git 管理的android系统代码(整个android源码是一个git工程,这点与现在android代码管理方式不一致),不同客户定制化的项目若修改了相关文件会拷贝一份到CUSTOMER目录修改,编译时再检查再拷贝会原来的目录覆盖后编译。

问题描述

有时修改了基类文件,可能会忽略客户定制项目是否有过修改。此时需要一个方法去判断客户定制的项目中是否有改过相关文件。

根据该需求,写了一个shell脚本,会判断此次修改了那些文件,然后对比客户项目目录下是否修改多相关文件。

大致思路是

  1. 将git status 的结果输出到gitStatus.log 文件下;
  2. 然后用grep抓取包含modified的行,并解析出对应文件路径存放到 gitFile.log 中;
  3. 遍历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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值