如何让Git按规则忽略executable_settings.json的特定类型变更
实现方案
Git 原生支持通过 clean/smudge 内容过滤器 实现自定义变更过滤,完全满足需求:在不修改工作区文件的前提下,仅将配置项变更纳入版本控制,自动忽略固定规则的运行时变更。
具体配置步骤
第一步:编写内容过滤脚本
推荐优先通过JSON解析处理(比正则匹配更稳定,避免误修改其他配置),你可以根据自己的实际运行时变更规则调整过滤逻辑,示例脚本filter-exec-settings.py内容如下:import sys, json content = json.load(sys.stdin) # 过滤不需要追踪的运行时字段,比如时间戳字段 if "Edited On" in content: content["Edited On"] = "FILTERED" # 有其他要过滤的运行时字段可以在这里加对应逻辑 json.dump(content, sys.stdout, indent=2)你也可以换成正则匹配的逻辑处理非标准格式的内容。
第二步:配置Git过滤器规则
在仓库根目录执行以下命令,为当前仓库注册过滤器:# clean规则:git add暂存文件时执行,过滤掉运行时变更 git config filter.exec-settings.clean "python3 你存放脚本的路径/filter-exec-settings.py" # smudge规则:拉取文件到工作区时不做修改,直接返回原内容 git config filter.exec-settings.smudge cat如果需要全局生效,给所有
git config命令加--global参数即可。第三步:绑定文件和过滤器
在仓库根目录的.gitattributes文件(如果不存在就新建)中添加一行,指定executable_settings.json使用我们定义的过滤器:executable_settings.json filter=exec-settings将
.gitattributes提交到仓库,同步给所有协作用户。
注意事项
- 过滤器规则属于Git本地配置,不会随仓库同步,所有协作用户都需要在本地完成第二步的过滤器配置,可以把配置步骤和脚本放到仓库README中说明,或者编写一键配置脚本降低协作成本。
- 配置完成后,如果只有运行时变更的内容改动,执行
git status不会将该文件标记为改动,仅当有配置项变更时才会识别到文件修改,符合预期。
内容的提问来源于stack exchange,提问作者SiriO
相关产品推荐
相关产品推荐

