使用git-diff时如何忽略某些文件

96
goddyzhao
2015.07.21 23:11* 字数 466

最近遇到这样的需求:我需要把某两次提交之间的代码变化diff出来,给另外一位童鞋去apply,但是diff的时候我又想忽略其中某几个文件(比如:自动化生成出来的类似build.js,dist.js之类的文件)。于是鼓捣了一番,找到了如下解决办法:

  1. 设置git-diff 自定义driver
  2. 在gitattributes中设置要忽略的路径和规则,使得对build.css和build.js做git-diff的时候有直接掉过的效果

设置git-diff driver

git支持自定义diff驱动器(见其中diff.driver.command的说明),意思是说git-diff的时候可以指定一个命令去跑,而不是跑内置的。有了这个配置支持,我们就可以设置如下nodiff的指令(在项目根路径):

git config diff.nodiff.command /usr/bin/true

这个指令干嘛呢?这个指令什么都不干,直接返回true(/usr/bin/true),这样就有了类似跳过的效果。

设置git attributes

关于git attributes可以直接看官方文档说明 ,我们利用这个特性在项目根目录中,创建一个.gitattributes文件,并添加如下配置:

build.css diff=nodiff
build.js  diff=nodiff

好了现在我们就可以连起来理解了,当我们运行git diff命令的时候,git就会读取.gitattributes的配置,然后发现遇到build.css和build.js文件的时候,需要执行nodiff指令,而nodiff指令被我们此前配置成了/usr/bin/true直接返回true,于是,就直接“跳过”了。

这里文件路径的配置和.gitignore是一样的,支持目录,文件,通配符之类的,可以轻松实现忽略一批文件或者整个目录。

Git
Web note ad 1