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

如何在未检出Git分支中递归列出含子模块提交内容的文件?

递归列出未检出Git分支的文件(含子模块内容)

由于git ls-tree本身没有--recurse-submodules选项,要实现未检出分支的递归文件列表(包含子模块提交内容),可以用以下两种方法:

方法1:自定义Shell脚本递归遍历

通过脚本解析目标分支的树结构,遇到子模块时自动递归查询其提交对应的文件列表:

#!/bin/bash

# 替换为你要查询的目标分支名
TARGET_BRANCH="feature-branch"

# 递归遍历Git树对象的函数
list_tree() {
    local tree_hash=$1
    local prefix=$2

    git ls-tree -r "$tree_hash" | while read -r mode type hash name; do
        if [ "$type" = "commit" ]; then
            # 识别到子模块,输出子模块目录并递归查询其内容
            echo "${prefix}${name}/"
            list_tree "$hash" "${prefix}${name}/"
        else
            # 输出普通文件/目录的完整路径
            echo "${prefix}${name}"
        fi
    done
}

# 获取目标分支对应的树对象哈希
BRANCH_TREE=$(git rev-parse "$TARGET_BRANCH^{tree}")

# 启动遍历
list_tree "$BRANCH_TREE" ""

使用步骤:

  • 将上述代码保存为list-branch-files.sh
  • 执行chmod +x list-branch-files.sh赋予执行权限
  • 替换脚本中的feature-branch为目标分支名,运行脚本即可得到完整文件列表

方法2:用git archive快速生成列表

借助git archive的--submodules选项打包分支(包含子模块),再通过tar查看归档内的文件列表,无需手动写递归逻辑:

# 替换为目标分支名
git archive --format=tar --submodules "your-branch" | tar -t

两种方法对比

  • 方法1灵活性更高,可根据需求修改输出格式或添加额外处理逻辑;
  • 方法2操作更简便,适合快速获取完整的文件路径列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:50:02