git ls-tree 是什么
列出树对象(提交快照)里的文件与子目录:-r 递归展开子目录、-l 附对象大小、--name-only 只输出路径。它看的是提交里的内容而不是工作区,适合做发布清单、核对线上版本对应的文件列表,也是脚本里遍历仓库内容的稳定数据源。
基本信息
| 用途 | 查看某提交/目录的文件清单 |
|---|---|
| -r | 递归展开子目录 |
| -l | 附对象大小(blob 显示字节数) |
| 路径语法 | git ls-tree HEAD:src(冒号不能省) |
| --name-only | 只输出路径,适合接管道统计 |
| 配合命令 | cat-file 看对象内容;rev-parse 解析提交引用 |
典型使用场景
- 发布清单:列出 tag 快照中的文件,与制品内容对照。
- 核对线上版本:确认某提交是否包含目标文件(如新配置)。
- 仓库摸底:统计快照文件数或查看某目录结构。
- 排查索引问题:提供「提交侧」视图,与工作区对比分析。
- 查看子目录:用 HEAD:src 语法直接看子目录树,无需切换分支。
- 脚本取数:--name-only 与 -z 组合可安全处理含特殊字符的路径。
- 深挖目录结构:逐层查看子目录哈希,理解大型仓库的树组织。
常用示例
常用示例
git ls-tree HEAD # 根目录条目:模式 类型 哈希 名称
git ls-tree -r HEAD -- src/ | head # 只看 src/ 下的递归条目
git ls-tree -l HEAD:src # 附对象大小的子目录清单
git ls-tree --name-only -r HEAD | wc -l # 统计快照里的文件总数输出逐列读法
| 列 | 含义 | 备注 |
|---|---|---|
| 模式 | 权限位(100644/100755/040000 等) | 040000 表示子目录 |
| 类型 | blob/tree/commit | commit 通常是子模块指针 |
| 哈希 | 对象 ID | 可配合 cat-file 进一步查看 |
| 名称 | 文件名或目录名(带路径前缀) | 递归输出时为完整路径 |
它反映提交内容,未提交改动不在此列;HEAD:src 的冒号语法不能省略,省略后会被当成普通路径过滤参数,含义完全不同,遇到结果异常先复查参数写法。