精华内容
下载资源
问答
  • diff指令使用

    2020-03-04 23:02:03
    diff 比较两个文件不同的点 示例如下: 我创建两个文件:a.dat和b.dat a.dat中内容如下: a b c b.dat中的内容如下: a c d 我们用diff命令实现两个文件的对比: root@45935ca24ed8 shell]# diff -u a.dat b.dat ...
    • diff
      比较两个文件不同的点
      示例如下:
      我创建两个文件:a.dat和b.dat
      a.dat中内容如下:
    a
    b
    c
    

    b.dat中的内容如下:

    a
    c
    d
    

    我们用diff命令实现两个文件的对比:

    root@45935ca24ed8 shell]# diff -u a.dat b.dat 
    --- a.dat	2020-03-04 14:39:55.880535686 +0000
    +++ b.dat	2020-03-04 14:40:09.643650689 +0000
    @@ -1,3 +1,3 @@
     a
    -b
     c
    +d
    

    下面解释一下这个差异信息

    -表示第一个文件,也就是a.dat
    +表示第二个文件,也就是b.dat
    @@ -1,3 +1,3 @@表示文件对比
    -1,3意思是第一个文件的1到3行
    +1,3表示第二个文件的1到3行

     a :两个文件中都有
    -b :第一个文件中有
     c :两个文件中都有
    +d :第二个文件中有
    

    有了文件差异,我们可以将两个文件的差异信息存起来,以便日后用于文件恢复
    diff -u a.dat b.dat > diff_a_b.diff
    如果我们弄丢了任意一个文件,则可以使用patch命令来恢复这个丢掉的文件
    假设我们弄丢了a.dat,我们执行如下三条命令:
    patch -b b.dat diff_a_b.diff
    mv b.dat> a.dat
    mv b.dat.orig b.dat

    展开全文
  • diff 命令  类似 comm 命令,diff 命令被用来监测文件之间的差异。然而,diff 是一款更加复杂的工具,它支持许多输出格式,并且一次能处理许多文本文件。软件开发员经常使用 diff 程序来检查不同程序源码版本之间...

    diff 命令

            类似 comm 命令,diff 命令被用来监测文件之间的差异。然而,diff 是一款更加复杂的工具,它支持许多输出格式,并且一次能处理许多文本文件。软件开发员经常使用 diff 程序来检查不同程序源码版本之间的更改,diff 能够递归地检查源码目录,经常称之为源码树。diff 程序的一个常见用例是创建 diff 文件或者补丁,它会被其它程序使用,例如 patch 程序(我们后面会讲到),来把文件从一个版本转换为另一个版本。

           diff 在命令行中打印每一个行的改动,并且 diff 是 svn、cvs、git 等版本控制工具不可或缺的一部分。diff 命令是 differential 的缩写。

    (1)命令格式

             diff [选项] 文件

     

    (2)常用参数

    参数 描述
    -c 上下文模式,显示全部内文,并标出不同之处
    -u 统一模式,以合并的方式来显示文件内容的不同
    -a 只会逐行比较文本文件
    -N 在比较目录时,若文件 A 仅出现在某个目录中,预设会显示:Only in 目录。 若使用-N 参数,则 diff 会将文件 A 与一个空白的文件比较
    -r 递归比较目录下的文件

    (3)常用范例

             例一:显示 file1.txt 和 file2.txt 两个文件的差异,可以使用如下命令:

    diff  file1.txt  file2.txt

           上面结果显示中的“2d1”表示 file1.txt 文件比 file2.txt 文件多了第一行(即file1.txt中多一个b而file2.txt中少一个b 所以第二位置b多一个),“4c3,4”表示 file1.txt 文件的第四行和 file2.txt 文件的第三、四行不同。

    diff 的 normal 显示格式有三种提示:

    • a - add
    • c - change
    • d - delete

            例二:从上面例一的显示结果可以知道,file1.txt 和 file2.txt 两个文件的差异不易直观看出,可以使用上下文模式显示,可以使用如下命令:

    diff  -c file1.txt  file2.txt

            这个输出结果以两个文件名和它们的时间戳开头。第一个文件用星号做标记,第二个文件用短横线做标记。纵观列表的其它部分,这些标记将象征它们各自代表的文件。

    *** 1,4 *** 表示第一个文件中第一行到第四行的文本行。
    --- 1,4 --- 表示第二个文件中第一行到第四行的文本行。

    三种特殊字符:

    + 添加行,这一行将会出现在第二个文件内,而不是第一个文件内

    - 删除行,这一行将会出现在第一个文件中,而不是第二个文件内

    ! 更改行,将会显示某个文本行的两个版本,每个版本会出现在更改组的各自部分

    这些特殊字符很容易混淆,实际上记住一点就行:所有操作目的是将第一个文件变成第二个文件。

            例三:查看 file1.txt 和 file2.txt 两个文件的差异,使用统一模式显示,可以使用如下命令:

    diff  -u file1.txt  file2.txt

         上下文模式和统一模式之间最显著的差异就是重复上下文的消除,这就使得统一模式的输出结果要比上下文模式的输出结果简短。

    @@ -1,4 +1,4 @@ 表示在在更改组中描述的第一个文件中的文本行和第二个文件中的文本行。

    特殊字符:

    • + 添加这一行到第一个文件中
    • - 在第一个文件中删除这一行
    展开全文
  • git diff 指令详解

    2017-09-17 23:36:42
    下面是一个通常的git diff的输出结果: $ git diff README.md diff --git a/README.md b/README.md index d29ab50..7e42b29 100644 --- a/README.md +++ b/README.md @@ -37,3 +37,4 @@ You can get it using ...

    下面是一个通常的git diff的输出结果:

    $ git diff README.md
    diff --git a/README.md b/README.md
    index d29ab50..7e42b29 100644
    --- a/README.md
    +++ b/README.md
    @@ -37,3 +37,4 @@
     You can get it using command `hostname` in your remote robot:
     $ hostname
    +Enjoy it!
    

    第一部分表示为你使用的git格式的diff:

    diff --git a/README.md b/README.md

    第二部分表示两个版本的git哈希值(index区域的d29ab50对象,与工作目录区域的7e42b29对象进行比较),最后的六位数字是对象的模式(普通文件,644权限)。

    index d29ab50..7e42b29 100644

    第三部分表示进行比较的两个文件:

    --- a/README.md
    +++ b/README.md

    "---"表示变动前的版本,"+++"表示变动后的版本。

    第四部分表示变动的位置,用两个@作为起首和结束:

    @@ -37,3 +37,4 @@

    前面的"-37,3"分成三个部分:减号表示第一个文件(即index区域的d29ab50对象),"37"表示第37行,"3"表示连续3行。合在一起,就表示下面是第一个文件从第37行开始的连续3行。同样的,"+37,4"表示变动后,成为第二个文件从第37行开始的连续4行。

    最后一部分是具体的差异部分:

    You can get it using command `hostname` in your remote robot:
     $ hostname
    +Enjoy it!
    展开全文
  • git diff指令

    2015-04-30 17:49:12
    準備工作目錄 ...我們透過以下指令快速建立一個擁有兩個檔案與兩個版本變更紀錄的 Git 儲存庫與工作目錄: mkdir git-demo  cd git-demo  git init    echo 1 > a.txt  e

    轉載自 http://ithelp.ithome.com.tw/question/10135441

    準備工作目錄
    -----------

    我們透過以下指令快速建立一個擁有兩個檔案與兩個版本變更紀錄的 Git 儲存庫與工作目錄:

    1. mkdir git-demo  
    2. cd git-demo  
    3. git init  
    4.   
    5. echo 1 > a.txt  
    6. echo 2 > b.txt  
    7. git add .  
    8. git commit -m "Initial commit"  
    9.   
    10. echo 3 > a.txt  
    11. echo 4 > b.txt  
    12. git add .  
    13. git commit -m "Update a.txt and b.txt to 3 and 4"  



    關於 git diff 的基本觀念
    ------------------------

    在 Git 中比對兩個版本之間的差異,通常會用 git diff 命令,我們先執行一個簡單的命令,比對兩個版本之間的差異:

    1. 先執行 git log 取得版本資訊,並取得最近兩個 commit 物件的 id
    2. 我們在執行 git diff commit1 commit2 指令,比對兩個版本間的差異,其中 commit1 請用較舊的版本,而 commit2 則用較新的版本。

    如下圖示:



    我們從 git diff 執行的輸出結果,將可得到一個執行的結果。由於我們這兩個版本庫中有兩個檔案,而且在這兩個版本之間也都有異動,所以他會列出兩段「差異比對」的結果。

    各位可以從上圖看到每一段都是以 diff --git 開頭,代表 git 對哪兩個檔案進行比對。

    第二行的 index 37bcc8b..d855592 100644 則是代表 git 在做這次比對時的「標頭資訊」(Header Line),這裡可能會有好幾行,資訊不一定只有這些。這裡會標示許多關於此次差異比對的額外資訊。例如 index 這行,後面的兩個 hash id (37bcc8b..d855592) 就代表在 Git 物件儲存庫(object storage)中的兩個 blob 物件 id,用來比較這兩個 blob 物件。在後面的 100644 則是 git 屬性,有點類似 Linux 環境下的檔案屬性,例如宣告這是個檔案、目錄、可讀、可寫、可執行之類的。以下是幾個常見的 git 屬性範例:
      
      0100000000000000 (040000): Directory
      1000000110100100 (100644): Regular non-executable file
      1000000110110100 (100664): Regular non-executable group-writeable file
      1000000111101101 (100755): Regular executable file
      1010000000000000 (120000): Symbolic link
      1110000000000000 (160000): Gitlink

    相關連結可參考以下討論串:

    * [How to read the mode field of git-ls-tree's output]
     http://stackoverflow.com/questions/737673/how-to-read-the-mode-field-of-git-ls-trees-output
    * [index-format.txt]
     https://github.com/gitster/git/blob/master/Documentation/technical/index-format.txt

    接下來第三行的 --- a/a.txt 則代表兩個比對的版本中「比較舊的」那個版本。

    接下來第四行的 +++ b/a.txt 則代表兩個比對的版本中「比較新的」那個版本。

    接下來第五行的 @@ -1 +1 @@ 則代表這個檔案在舊版的總行數與新版的總行數,-1 代表舊版只有 1 行,+1 代表新版也只有 1 行。

    最後則是列出所有變更的內容,這裡有三種可能的表示法:

    * 以減號 - 號開頭,代表從舊版到新版的過程中,此行被刪除了。
    * 以加號 + 號開頭,代表從舊版到新版的過程中,此行是被新增上去的。
    * 以空白字元開頭,則代表這一行在兩個版本中都有出現,沒有任何變更。

    如此一來就完成了這兩個版本中第一個 blob 物件的差異比對,接著會顯示該版本中第二個 blob 物件的差異比對,以此類推。

    在 Git 中使用 git diff 的時候,事實上是以 tree 物件為比較的單位,我們從【30 天精通 Git 版本控管 (06):解析 Git 資料結構 - 物件結構】文章圖解與影片中有學到,其實每一個 commit 物件都會包括一個根目錄的 tree 物件。所以我們剛剛利用 git diff 比對兩個 commit 物件時,其實比對的是 commit 物件下的那個 tree 物件,而比對的過程又會遞迴的一直比下去。由此你應該可以感受到,Git 的 diff 比對機制十分強大,你可以很快速的比對出任意兩個版本之間的異動比較。

    在使用 git diff 命令時,主要有三種 tree 物件的來源,分別是:

    * 在所有的 commit graph 中存在的 tree object,也就是任意版本中任意一個 tree 物件的意思。
    * 索引 (index),代表你已經將檔案狀態送進「索引資料庫」的那些資訊,此時透過 git add命令時,其實 tree 物件已經被建立。
    * 你目前的工作目錄 (working directory),雖然工作目錄的改變還沒有變成 tree 物件,但透過git diff 是可以這樣用的。

    四種基本的比較方式
    -----------------

    要透過 git diff 命令比對任意兩個版本,通常會有以下四種指令的用法:

    1. git diff

      在什麼參數都不加的使用情況,比對的是「工作目錄」與「索引」之間的差異。這是個很常用的指令,因為當你執行 git add . 指令之前,先透過 git diff 查看你自己到底改了哪些東西。

      :事實上,在使用 Git 版本控管的過程中,在執行 git commit 之前,的確有可能會執行 git add 指令好幾次,用以確認到底哪些檔案要加入到索引之中,最後才會 commit 進版本。

    2. git diff commit

      如果你只在 git diff 之後加上一個 commit id,比對的是「工作目錄」與「指定 commit 物件裡的那個 tree 物件」。

      最常用的指令是 git diff HEAD,因為這代表你要拿「工作目錄」與「當前分支的最新版」進行比對。這種比對方法,不會去比對「索引」的狀態,所以各位必須區分清楚,你到底比對的是甚麼 tree 物件的來源。

    3. git diff --cached commit

      在執行 git commit 之前,索引狀態應該已經都準備好了。所以如果你要比對「當前的索引狀態」與「指定 commit 物件裡的那個 tree 物件」,就可以用這個指令完成比對任務。

      最常用的指令一樣是 git diff --cached HEAD,這個語法代表的是「當前的索引狀態」與「當前分支的最新版」進行比對。這種比對方法,不會去比對「工作目錄」的檔案內容,而是直接去比對「索引」與「目前最新版」之間的差異,這有助於你在執行 git commit之前找出那些變更的內容,也就是你將會有哪些變更被建立版本的意思。 

      註1git diff --cached 與 git diff --staged 是完全一樣的結果,--staged 只是 --cached 的別名,讓你比較好記而已!

      註2git diff --cached 與 git diff --cached HEAD 執行時也是完全一樣的結果,最後的 HEAD 可以省略。

    4. git diff commit1 commit2

      最後一種則是透過兩個不同的版本 ( commit id ) 來比對其差異,這個命令可以跳過「索引」與「工作目錄」的任何變更,而是直接比對特定兩個版本。事實上 Git 是比對特定兩個版本 commit 物件內的那個 tree 物件。

      最常用的指令則是 git diff HEAD^ HEAD 命令,這代表你要比較【最新版的前一版】與【最新版】之間的差異。這裡的 HEAD 與 ^ 的意義,我們會在日後的文章中說明。


    今日小結
    -------

    今天介紹的 git diff 是個很常用的指令,各位應該熟練地使用它。我們最後來複習一下其常用指令的差異:

      git diff          => 工作目錄 vs 索引
      git diff HEAD       => 工作目錄 vs HEAD
      git diff --cached HEAD  => 索引 vs HEAD
      git diff --cached     => 索引 vs HEAD
      git diff HEAD^ HEAD   => HEAD^ vs HEAD

    我重新整理一下本日學到的 Git 指令與參數:

    * git log
    * git diff 
    * git diff HEAD
    * git diff --cached
    * git diff --staged
    * git diff HEAD^ HEAD

    參考連結
    -------

    * [BASIC SNAPSHOTTING](http://gitref.org/basic/#diff)
    * [git-diff(1) Manual Page](https://www.kernel.org/pub/software/scm/git/docs/git-diff.html)


    展开全文
  • 指令 diff patch

    2017-07-27 09:22:28
    linux diff 和patch指令的用法
  • 这是LINUX上一个及其常用但又功能较为繁复的指令,作为新手,很可能被搞懵。 这里我只给出一两种常规的入门用法。 如果想深入了解,文章下面有链接地址,也 可以找man(如果你英文好的话)。 1.定义: diff -...
  • Linux指令--diff

    2015-12-18 14:00:00
    diff命令是linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁(patch),...
  • Linux文本比较指令-diff

    2017-07-30 11:44:06
    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方。diff在命令行中打印每一个行的改动。最新版本的diff还支持二进制文件。diff程序的输出被称为补丁 (patch)...
  • Vue常见指令和key和diff算法 常见指令 v-bind指令 基本使用 相应式数据不仅仅可以展示在胡子语法内,而且可以绑定到标签的属性上。 v-bind的语法糖写法 v-bind:href=""===>>> :href v-bind用 : 表示 v-...
  • 创建一个新的文件夹test然后进入test mkdir test ...使用以下指令生成文件差异 diff -u a.txt b.txt > diff1.txt 这是以a为原始文件,b为目标文件 打开diff1.txt看看 白色字体代表两个文件
  • 一、文本文件比较命令diff 1>diff命令的功能 Linux中diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。 2>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 454
精华内容 181
关键字:

diff指令