gitattributes 进阶是什么
gitattributes 除了控制行尾与 LFS 之外,还能声明差异显示方式、合并驱动、打包导出与语言统计等行为。文件按「模式 属性列表」逐行描述,随分支入库,因此同一仓库在不同分支上可能表现不同。检查别人仓库时,先用 git check-attr 确认某路径真实生效的属性。
基本信息
| 核心命令 | git check-attr -a <路径> 查看生效属性 |
|---|---|
| 常用位置 | 仓库根 .gitattributes;也可放子目录,作用限于该目录树 |
| 差异选项 | text、-diff、diff=<驱动> |
| 导出选项 | export-ignore、export-subst(git archive 打包时生效) |
| 平台统计 | linguist-vendored、linguist-generated(托管站语言统计用) |
典型使用场景
- 发布包控制:git archive 时排除测试、CI 与文档目录
- 生成文件与锁文件:标注为不显示差异,评审更安静
- 第三方代码目录:标记 vendor 属性,让语言统计只算自家代码
- 自定义文本转换:为特定后缀指定 diff 驱动或合并策略
- 模板替换:export-subst 在打包时把格式化占位符替换成提交信息
属性示例
属性示例
# 打包发布时排除测试与 CI 文件
/tests/ export-ignore
/.github/ export-ignore
# 第三方目录不计入语言统计
vendor/** linguist-vendored
# 生成文件不显示逐行差异
package-lock.json -diff
# 校验用:查看某路径最终生效的属性值
git check-attr -a vendor/lib.js常见属性
| 属性 | 作用 | 生效对象 |
|---|---|---|
| text 与 eol | 行尾规范与检出风格 | 检出、提交、diff |
| -diff 或 diff=驱动 | 按二进制跳过或自定义差异 | diff 与 log 显示 |
| export-ignore | git archive 打包时排除 | 发布归档 |
| export-subst | 打包时替换占位符 | 发布归档 |
| linguist-vendored | 标记第三方代码 | 托管平台语言统计 |
属性文件随分支变化:同一文件在 feature 分支与 main 上的属性可能不同,排查差异显示问题先看当下生效值。
属性模式的大小写敏感性跟随文件系统与 core.ignorecase;跨平台团队在 Windows、macOS 与 Linux 上都要验证同一模式命中的文件是否一致。