keep-ours 合并驱动是什么
对版本号文件、锁文件、生成物等「合并时永远保留当前分支」的文件类型,可以在 .gitattributes 里绑定自定义合并驱动,让 Git 遇到冲突时自动选择本地版本,不再人工处理。驱动本体是一段命令,由 merge.<名称>.driver 配置;最简单的驱动是 true:命令直接成功,结果保留当前分支文件(%A)。
基本信息
| 用途 | 指定文件类型合并时自动保留一侧 |
|---|---|
| 配置 | merge.<名称>.driver 定义命令;.gitattributes 引用 |
| 适用文件 | 版本文件、锁文件、生成物 |
| 占位符 | %O 共同祖先、%A 当前分支(结果写回)、%B 对方分支、%P 路径 |
| 局限 | 静默丢弃对方改动,仅限「本地必赢」清单 |
典型使用场景
- 锁文件:依赖锁再生成本低,保留本地后重新生成即可。
- 版本号文件:合并时永远取目标分支的版本号。
- 生成物:构建产物以本地为准,防止旧产物覆盖新结果。
- 本地配置样例:每位开发者各自维护的样例文件。
- 噪声治理:把最常冲突的文件先压下去,减少人工解决量。
- 多环境配置:按环境保留各自的值,合并时不互相覆盖。
配置示例
配置示例
git config merge.keepours.driver true # 最简驱动:永远成功,保留当前分支
printf 'VERSION merge=keepours\n' >> .gitattributes # 绑定文件类型
# 需要复杂逻辑时换脚本:%O 共同祖先 %A 当前分支(结果写回) %B 对方 %P 路径
git config merge.keepours.driver 'sh scripts/merge-keepours.sh %O %A %B %P'配置要素
| 要素 | 说明 | 注意 |
|---|---|---|
| 驱动名 | 自定义标识 | 配置与 .gitattributes 两处一致 |
| 命令 | 处理并写回 %A | 简单场景用 true 即可 |
| 绑定 | 文件模式 merge=名称 | 每类文件单独一行 |
| 分发 | 驱动脚本随仓库提供 | 未配置的机器行为不同 |
自动保留会让对方在该文件的改动静默消失,只用于「本地必赢」的特定文件,并在评审中说明;把逻辑文件误配进来等于丢代码。