使用git-diff時如何忽略某些檔案

weixin_33785972發表於2015-07-21

最近遇到這樣的需求:我需要把某兩次提交之間的程式碼變化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是一樣的,支援目錄,檔案,萬用字元之類的,可以輕鬆實現忽略一批檔案或者整個目錄。

相關文章