在 git 中对指定文件的指定行操作

场景

这里拿单独项目来举例,我的前端项目有关于 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 忽略独立的行,某些代码文件中的特定几行

【其他关联】本地忽略修改文件而不影响远程仓库  – JeeInn的技术分享

Author: thinkwei

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注