如何用gitattribute和git config忽略同类型文件中的多行代码?
解决Git忽略同类型文件多行代码的问题
针对你问的两个实现方式,直接说结论:这两种写法Git都不支持,得换合并命令的方式来做。
关于.gitattributes设置多个过滤器的问题
Git的.gitattributes里,同一类文件只能指定一个过滤器,*.rs filter=filterA + filterB这种写法完全不生效,后声明的过滤器会直接覆盖前面的,所以你之前遇到的覆盖问题是正常的,这种思路走不通。
关于同一个过滤器添加多条clean规则的问题
Git的config里,同一个过滤器的同一个配置项(比如clean)只会保留最后一行的设置,你写两个clean = sed ...的话,后面的会直接覆盖前面的,等于只执行了最后一条sed命令。
正确的做法:合并sed命令
要删除包含abc或def的行,把多个sed操作合并成一条命令就行,两种写法都可以:
- 用
-e参数串联多个sed指令:
[filter "filterC"] clean = sed -e "/abc/d" -e "/def/d"
- 用分号分隔多个sed指令:
[filter "filterC"] clean = sed "/abc/d; /def/d"
你之前试的sed "/abc*def/d"之所以无效,是因为这个正则的意思是匹配包含abc后接任意数量d再跟ef的行,不是匹配包含abc或者def的行。如果你的需求是删除同时包含abc和def的行,才需要用"/abc.*def/d"(abc在def前面)或者"/def.*abc/d"(def在abc前面),但显然这不是你的需求。
内容的提问来源于stack exchange,提问作者kenta_desu
相关产品推荐
相关产品推荐

