學習分析diff的輸出

2021-10-02 00:14:56 字數 2475 閱讀 9992

diff

[option]

... files

files一般為

最早的unix(即at&t版本的unix),使用的就是這種格式的diff。

$ diff f1 f2

4c4< a

---> b

分析:

a表示addition,d表示deletion,c表示change

4c4表示old file(f1)的第4行change為new file(f2)的第四行

<表示刪除,>表示增加,---表示分割old file與new file的改動顯示

上個世紀80年代初,加州大學伯克利分校推出bsd版本的unix時,覺得diff的顯示結果太簡單,最好加入上下文,便於了解發生的變動。因此,推出了上下文格式的diff。

它的使用方法是加入c引數(代表context)。

❯ diff -c  f1 f2

*** f1 2020-06-05 10:56:20.728913835 +0800

--- f2 2020-06-05 10:56:39.480910387 +0800

***************

*** 13,19 ****

a a

a! a

a a

a--- 13,19 ----

a a

a! b

a a

a

分析:

***表示變動前的檔案,---表示變動後的檔案。

2020-06-05 10:56:20.728913835 +0800表示最後修改日期與修改時間,+0800是中國的北京時間

*** 13,19 ****表示變動前的檔案的第13行到第19行。

每行前有標誌位,如果為空,表示該行無變化;若是!,表示該行有改動;若是-,表示該行被刪除;若是+,表示該行為新增。除了變動行(第4行)以外,也是上下文各顯示三行,總共顯示7行

如果兩個檔案相似度很高,那麼上下文格式的diff,將顯示大量重複的內容,很浪費空間。2023年,gnu diff率先推出了"合併格式"的diff,將f1和f2的上下文合併在一起顯示。

❯ diff -u  f1 f2

--- f1 2020-06-05 10:56:20.728913835 +0800

+++ f2 2020-06-05 10:56:39.480910387 +0800

@@ -13,7 +13,7 @@

a aa-a

+b a

a a

分析:

@@ -13,7 +13,7 @@中,-表示第乙個檔案(即f1),"13"表示第13行,「7"表示連續7行。合在一起,就表示下面是第乙個檔案從第1行開始的連續7行。同樣的,」+13,7"表示變動後,成為第二個檔案從第13行開始的連續7行

每一行最前面的標誌位,空表示無變動,-表示第乙個檔案刪除的行,+表示第二個檔案新增的行。

版本管理系統git,使用的是合併格式diff的變體。

diff --git a/f1 b/f1

index 6f8a38c..449b072 100644

--- a/f1

+++ b/f1

@@ -1,7 +1,7 @@aa

a-a+ba

aa

分析:

diff --git a/f1 b/f1表示結果為git格式的diff

index 6f8a38c..449b072 100644表示兩個版本的git雜湊值(暫存區的6f8a38c物件,與工作區的449b072物件進行比較),最後的六位數字是物件的模式(普通檔案,644許可權)。

---表示變動前的版本,+++表示變動後的版本。

@@ -1,7 +1,7 @@中,-表示第乙個檔案(即f1),"1"表示第1行,「7"表示連續7行。合在一起,就表示下面是第乙個檔案從第1行開始的連續7行。同樣的,」+1,7"表示變動後,成為第二個檔案從第1行開始的連續7行

每一行最前面的標誌位,空表示無變動,-表示第乙個檔案刪除的行,+表示第二個檔案新增的行。

讀懂diff的輸出

今天在學習git的使用時,用到git diff去檢視git倉庫改變情況,其中關於diff的輸出,一大堆東西,不知所云,因此,查詢相關資料,總結下diff的輸出。root foundation16 learngit vim diff.txt root foundation16 learngit cat...

vue的diff演算法學習

原始碼位址 diff演算法首先要明確乙個概念就是diff的物件是虛擬dom,更新真實dom則是diff演算法的結果 constructor 這個部分的 主要是為了更好地知道在diff演算法中具體diff的屬性的含義,當然也可以更好地了解vnode例項 核心函式是patch函式 isundef判斷 是...

虛擬DOM和diff演算法的分析理解

一 dom和虛擬dom 我是文字 p div var vnode 二 虛擬dom的設計思想 虛擬dom的核心思想是 對複雜的文件dom結構,提供一種方便的工具,進行最小化地dom操作。提供一種方便的工具,使得開發效率得到保證 保證最小化的dom操作,使得執行效率得到保證 根據虛擬dom樹最初渲染成真...