场景
这里拿单独项目来举例,我的前端项目有关于 package.json
的 start 指令有修改,但不想让修改提交到代码库。
利用 git 提供的 attributes 文件或者配置来实现
一、创建属性文件
方法1 (不需要提交到代码仓库)
在项目中新建文件 .git/info/attributes
,内容如下:
package.json filter=ignore_lines_filter
方法2
项目根目录创建 .attributes
文件,内容同上。需要共享给团队使用
注:filter=
后面为过滤规则
二、添加过滤规则
方法1 使用命令添加
git config filter.ignore_lines_filter.clean "sed '/ignore_line/d'"
git config filter.ignore_lines_filter.smudge "cat"
方法2 在文件中添加 .git/config
过滤规则,效果同上
[filter "ignore_lines_filter"]
clean = sed '/ignore_line/d'
smudge = cat
注:可以使用 git --global
实现全局配置,clean 代表在提交代码时执行,smudge 代表在检出时执行
可根据自己需要修改具体执行命令,如我本地的设置
[filter "ignore_lines_filter"]
clean = sed 's/SET NODE_OPTIONS=--openssl-legacy-provider && //g'
smudge = sed 's/"start": "cross-env/"start": "SET NODE_OPTIONS=--openssl-legacy-provider && cross-env/g'
参见讨论:How to tell git to ignore individual lines, i.e. gitignore for specific lines of code – Stack Overflow 如何让 git 忽略独立的行,某些代码文件中的特定几行