super-linter无法检测已成功拉取的子模块问题求助
解决Super-Linter无法识别Git子模块的问题
问题分析
你已通过actions/checkout@v4成功拉取含递归子模块的仓库,子模块位于src/components目录,但Super-Linter跳过了该目录。日志提示File:{/github/workspace/src/components} existed in commit data, but not found on file system,原因是父仓库Git仅记录子模块引用而非实际文件,Super-Linter默认基于Git提交数据筛选文件时,会误将子模块目录判定为“不存在的文件”,从而跳过扫描。
解决方案
修改Super-Linter的环境变量配置,强制其直接扫描本地文件系统(包含子模块目录),具体配置如下:
- name: Clone repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Super-linter uses: super-linter/super-linter@v5.7.2 env: DEFAULT_BRANCH: develop GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} VALIDATE_ALL_CODEBASE: true RUN_LOCAL: true SKIP_GIT_DIFF: true # 可选:按需限制扫描范围,比如仅扫描src目录下的所有文件 FILTER_REGEX_INCLUDE: "^src/.*"
关键变量说明
RUN_LOCAL: true:让Super-Linter直接读取本地文件系统内容,而非依赖Git提交记录或GitHub API获取文件列表SKIP_GIT_DIFF: true:跳过基于Git差异的文件筛选逻辑,确保扫描工作区内所有文件VALIDATE_ALL_CODEBASE: true:明确指定扫描整个代码库,与前两个变量配合确保覆盖子模块FILTER_REGEX_INCLUDE:可选配置,用于缩小扫描范围,避免扫描无关文件
备选方案(复杂场景适配)
如果子模块是独立代码库,需单独定制扫描规则,可在工作流中添加单独步骤,进入子模块目录运行Super-Linter:
- name: Lint submodule uses: super-linter/super-linter@v5.7.2 env: DEFAULT_BRANCH: develop GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RUN_LOCAL: true WORKING_DIRECTORY: "./src/components"
内容的提问来源于stack exchange,提问作者Niahm
相关产品推荐
相关产品推荐

