"when you use 'diff', what do you think?"html
當我第1次用diff的時候,我是這樣想的:2個文件的不一樣處有不少種狀況,diff是如何處理的呢?git
搜了幾篇關於用法的網頁:都是講參數、輸出結果的解讀。。都不能回答上面的問題。github
diff用3種行爲描述不一樣之處,並經過這3種操做,可使2個文件變爲相同。算法
3種操做是:add, delete, change;htm
但實際狀況是:有多種不一樣的操做使2個文件相同,那麼diff用的是什麼算法?ip
舉例:it
file1; file2;io
1, 4,file
2, 1,cgi
3, 3,
4, 2,
diff的第1個操做輸出是:
0a1
>4
即,file1前添加4,,使第1行與file2相同;
可是,要使2文件的第1行相同,還可能的操做是:
方法1》file2刪除第1行;
方法2》file1刪除前3行。
爲何diff選擇了上述的輸出?
因而我又搜索了相關資料,發現diff的背後並不簡單,不過有1點是肯定的:那就是算法!
有關算法的資料:
http://en.wikipedia.org/wiki/Diff#Algorithm
http://stackoverflow.com/questions/805626/diff-algorithm
http://c2.com/cgi/wiki?DiffAlgorithm
http://www.faqs.org/rfcs/rfc3284.html
https://github.com/paulgb/simplediff
固然我並非說非要去了解這些算法,相反我以爲並不須要瞭解他們。
但到此爲止,算是解除了心頭的疑惑;
那麼,該用diff作些什麼,何時用diff,何時diff的結果對咱們有幫助呢?
我剛用,還不能回答;
我試了1下,對1個修改過的文件和原文件;
結果不錯:修改的內容都是添加,因而diff的結果把我添加的新內容都顯示出來了!