如何配置Git让指定文件夹默认采用「接受对方版本」合并策略?
一、配置Git让特定文件夹自动用对方版本合并
要让compiled文件夹默认采用「接受对方版本」的合并策略,不用每次手动执行git pull -X theirs compiled,可以通过Git的路径合并驱动实现,步骤如下:
添加自定义合并驱动配置
打开Git配置文件(全局配置为~/.gitconfig,仓库本地配置为.git/config),加入以下内容:[merge "keep-theirs"] name = 合并时始终保留对方分支的版本 driver = git checkout --theirs %A && git add %A这个驱动的逻辑是:合并时直接用对方分支的版本覆盖本地编译文件,然后自动标记冲突已解决。
绑定文件夹与合并驱动
在仓库根目录创建或编辑.gitattributes文件,添加一行规则:compiled/** merge=keep-theirs这会让Git对
compiled文件夹下的所有文件,自动应用keep-theirs合并策略。验证效果
后续拉取或合并分支时,compiled文件夹的冲突会自动处理,无需再手动指定合并参数。
二、针对GitHub Actions的优化方案
你提到用GitHub Actions自动编译仍存在合并问题,可以尝试以下两种调整方式:
将编译文件存到单独分支
配置GitHub Actions编译完成后,将产物推送到专门的分支(比如compiled-artifacts或gh-pages),主分支仅保留源码。本地开发时不会碰到编译文件的冲突;需要生产文件时,直接拉取该专门分支即可,仓库克隆者也能按需选择拉取源码或编译产物。本地忽略编译文件,仓库保留编译文件
不在项目公共的.gitignore中添加compiled/,而是在本地的.git/info/exclude文件中加入这一行。这样本地编译的文件不会被Git追踪,但仓库中的编译文件依然保留。配合Actions自动编译并推送编译文件到主分支,本地拉取时只会获取仓库中的版本,不会因本地编译的时间戳产生冲突。
三、额外提醒
- 上述合并驱动仅在merge操作时生效,如果使用rebase模式拉取,需额外配置rebase策略,日常使用merge模式即可满足需求。
- 若团队成员都需要该配置,建议将
.gitattributes提交到仓库,合并驱动的配置可写成脚本让大家统一执行,或写入项目开发文档说明。
内容的提问来源于stack exchange,提问作者Ridhwan Saal

