Git自定义合并驱动无法自动暂存已解决文件,如何处理?
解决自定义Git合并驱动自动暂存问题
问题根源
你配置里的recursive = binary是核心问题——这个设置会让Git把你的自定义驱动识别为二进制文件合并驱动。Git对文本和二进制合并驱动的处理逻辑有明确区别:
- 内置text驱动属于文本类型,当驱动成功合并(返回0)时,Git会自动将文件暂存到索引
- 二进制驱动即便合并成功,Git也不会自动暂存,因为二进制文件通常需要手动确认内容正确性
你的驱动实际是处理文本文件的,却被标记为二进制类型,导致成功合并后Git跳过了自动暂存步骤。
修复方案
将配置中的recursive = binary改为recursive = text,或者直接删除这一行(Git默认会按文本驱动处理):
[merge "auto-pro"] name = Auto-merge as much as possible and don't add conflict markers driver = git merge-file -p %A %O %B > %P || (git merge-file --ours -p %A %O %B > %P && false) recursive = text
为什么不能直接加git add
合并过程中Git会锁定索引,自定义驱动运行在这个锁定的上下文环境中,此时执行git add会触发索引锁定报错,这是Git的保护机制,避免并发修改索引导致数据不一致。必须让Git在驱动成功返回后,按照文本驱动的逻辑自动完成暂存。
内容的提问来源于stack exchange,提问作者BonusLord
相关产品推荐
相关产品推荐

