最近遇到這樣的需求:我需要把某兩次提交之間的代碼變化diff出來,給另外一位童鞋去apply,但是diff的時候我又想忽略其中某幾個文件(比如:自動化生成出來的類似build.js,dist.js之類的文件)。于是鼓搗了一番,找到了如下解決辦法:
- 設置git-diff 自定義driver
- 在gitattributes中設置要忽略的路徑和規(guī)則,使得對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可以直接看官方文檔說明 ,我們利用這個特性在項目根目錄中,創(chuàng)建一個.gitattributes文件,并添加如下配置:
build.css diff=nodiff
build.js diff=nodiff
好了現(xiàn)在我們就可以連起來理解了,當我們運行git diff命令的時候,git就會讀取.gitattributes的配置,然后發(fā)現(xiàn)遇到build.css和build.js文件的時候,需要執(zhí)行nodiff指令,而nodiff指令被我們此前配置成了/usr/bin/true直接返回true,于是,就直接“跳過”了。
這里文件路徑的配置和.gitignore是一樣的,支持目錄,文件,通配符之類的,可以輕松實現(xiàn)忽略一批文件或者整個目錄。