You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Git主仓库及递归子模块中相对主仓库的变更文件

需求:递归获取主仓库及嵌套子模块中所有变更文件的完整路径

假设仓库结构如下:

MainRepo
  file1
  file2
  directory1
    file3
  submodule1
    fileA
    fileB
  submodule2
    submodule3

其中file*由MainRepo跟踪,submodule1和submodule2是MainRepo的子模块,submodule3是submodule2的子模块。

主仓库与子模块各自拥有独立提交记录,MainRepo当前提交会对应submodule1和submodule2的特定提交,但子模块当前检出的提交可能和主仓库提交中记录的不一致。

我需要获取所有相对MainRepo路径的文件列表,要求:

  • 这些文件的状态与MainRepo当前提交中记录的状态不同
  • 递归处理嵌套子模块,子模块文件的状态需要和主仓库提交对应的子模块提交状态对比
  • 「状态不同」包含:文件被修改、删除,或新增(未追踪且未被忽略)的文件

示例场景与期望输出

主仓库处于提交aaabbb,该提交指向submodule1的提交aaa111,但当前submodule1处于提交aaa122(该提交修改了fileA,且之后fileA无未追踪变更);提交aaa122后,fileB被修改且未提交;同时主仓库的file1和directory1/file3也被编辑。此时期望得到的文件列表为:

MainRepo/file1
MainRepo/directory1/file3
MainRepo/submodule1/fileA
MainRepo/submodule1/fileB

简单来说,该列表应包含所有与执行git clone --recurse-submodules MainRepo后得到的文件状态不同的文件路径。

现有命令的局限性

git diff --name-only SHA1 SHA2或git ls-files -om --exclude-standard无法满足需求,因为它们不会递归进入嵌套子模块。

内容的提问来源于stack exchange,提问作者SU3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:41:00