外观
如何理解隔离工作目录与可复现的 CI?
标准回答
在同一工作目录反复切换 base 和 head,容易覆盖未提交改动或混入构建产物。Git worktree 可以为不同提交提供独立工作树,共享对象库,同时保留各自检出状态。分析任务应面向精确提交,清理也只针对自己创建的目录。
构建缓存、Gradle 用户目录、报告路径和并发任务仍可能共享资源,因此隔离工作树不等于隔离所有环境。应固定 JDK、Android SDK、Gradle、依赖锁定策略和规则版本,记录变体与实际命令。
CI 报告需要区分代码诊断、工具执行失败和基础设施失败。依赖下载中断、Gradle 配置错误或分析器崩溃,不能被显示为“零问题通过”;同时应避免把临时网络失败伪装成代码风险。
追问与回答
怎样避免本地与 CI 结论不同
先比较工具链、变体、生成源码、依赖和 lint 配置,再重跑同一精确提交。报告附带输入指纹比只附命令更可复现。
可以共享 Gradle 缓存吗
可以在工具支持的并发语义下共享,但应避免共享易被覆盖的任务输出;隔离不能以破坏缓存一致性为代价。
易混淆点
- 分析命令异常退出后仍生成绿色门禁结果。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q128