在项目开发中, 有些配置文件中的配置是因为机器会不一样的, 比较配置文件中的IP地址或数据库地址, 这时我们希望每个项目保持这些配置而不相互覆盖.
这里我们希望在*.ini文件中所有以//#gitignore
结尾的行保持不变
首先我们在项目中建立一个.gitattributes
文件, 里面写上*.ini filter=lineignore
这句的意思在所有*.ini加上一个过滤器, 过滤器的名字叫lineignore
然后我们建立一个.gitconfig
文件, 里面写上
git config --global filter.lineignore.clean "sed '/\/\/#gitignore$/d'"
git config --global filter.lineignore.smudge cat
第一句的意思在提交前上做sed的删除操作d, 删除的条件是//#gitignore
结尾. 这一来删除过后就不会提交了
忘了sed命令的, 可以去https://www.runoob.com/linux/linux-comm-sed.html补下
第二句的意思在拉取后做cat操作, 基本上就是空操作. (注意在其他场景可能会用到sed的替换功能, 具体请参考https://yaowenjie.github.io/%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/gitignore-specific-line)
这样所有以//#gitignore
结尾的行中所有的改动在stage后, 都会在提交前被删掉, 也就是不提交, 达到ignore的目的.
注意,如果在smartgit中改变以//#gitignore
结尾的行stage后, 改变还在的话说明配置没有成功, 尝试手动在命令行执行.gitconfig
中的内容
参考链接:https://blog.csdn.net/Bekind2010/article/details/80024235