如何在 Linux 中使用差異文件

如何在 Linux 中使用差異文件

Diff 是 Unix 系統的命令行工具,它允許您比較兩個文件或目錄並查看它們之間的差異。它非常適合比較文件的新舊版本以查看更改內容。在本文中,我們向您展示瞭如何diff在 Linux 中輕鬆地比較文件。

使用 diff 比較文件

  • 打開一個終端窗口。
  • 鍵入diff要比較的兩個文件的路徑。在這種情況下,我使用以下命令在桌面上比較兩個小型 C 程序:

diff ~/Desktop/hello.c ~/Desktop/hello-1.c

顯示 diff 命令的終端窗口。
  • Enter提交命令。結果顯示將向您顯示文件之間的所有不同行。比較的行號將顯示為“1c1”,這意味著第一行已更改,並且發現了以下差異。
顯示 diff 命令輸出的終端窗口。
  • 要並排查看文件及其差異,請-y在 之後使用標誌diff。例如:

diff -y ~/Desktop/hello.c ~/Desktop/hello-1.c

顯示將打印視覺差異的命令的終端窗口。

任何帶有豎線符號 ( |) 的行都是不同的行。請務必先展開您的終端窗口,否則您可能很難看到顯示內容。

顯示可視差異命令輸出的終端窗口。

使用 Meld 比較文件

的功能也可以通過Melddiff訪問,Meld 是. 考慮到 diff 的用戶界面可能很難掌握,Meld 是一個有用的工具。diff

  • 通過打開終端並鍵入以下命令從命令行安裝 Meld:

sudo apt -y install meld

或者

sudo dnf -y install meld

對於基於 RPM 的發行版。

這將初始化 apt 包管理器並開始安裝 Meld。請注意,該-y標誌將自動對任何提示說“是”;如果您希望手動確認這些提示,請將其刪除。

顯示 Meld 安裝命令的終端窗口。
  • 出現提示時輸入您的管理員密碼。當您再次看到命令提示符時,安裝完成,可以打開 Meld。
顯示 Meld 安裝過程的終端窗口。
  • 當您打開 Meld 時,您會看到三個選項:文件比較、目錄比較和版本控制視圖。點擊“文件”。
Meld 歡迎屏幕的屏幕截圖。
  • 將出現兩個下拉菜單,均顯示為“(無)”。單擊一個以選擇一個文件進行比較。
Meld 屏幕的屏幕截圖,其中突出顯示了第一個文件選擇器。
  • 單擊另一個下拉菜單以選擇第二個文件進行比較。
Meld 屏幕的屏幕截圖,其中突出顯示了第二個文件選擇器。
  • 單擊“比較”按鈕。
Meld 屏幕的屏幕截圖,其中突出顯示了“比較”按鈕。
  • 下一個窗口總結了兩個文件之間發現的任何差異。紅色字符是差異,藍色背景表示那一行有差異。綠色背景表示一行存在於一個文件中,但不存在於另一個文件中。
Meld 程序的屏幕截圖,帶有簡單的兩個文件比較視圖。
  • 要在差異之間導航,請單擊菜單欄中的向上和向下按鈕。您也可以直接用鼠標在文檔中單擊。
Meld 程序的屏幕截圖突出顯示了其 diff 導航按鈕。

在 Meld 中操作文件

除了進行比較之外,Meld 還允許您更改比較的文件。Meld 將在您修改任一版本時繼續分析文檔的更改,您可以隨時按Ctrl+撤消更改。Z

  • 要將更改從一個文件複製到另一個文件,請單擊更改之間的黑色小箭頭。例如,單擊左側的箭頭將使用左側文檔的行覆蓋右側的文檔。
顯示差異解析按鈕的 Meld 程序屏幕截圖。
  • 也可以在不覆蓋的情況下將行插入到文檔中。如果按住該Ctrl鍵,您會看到上一步的箭頭變成加號。單擊該圖標可打開一個小對話框,您可以在其中選擇插入新行的位置。
Meld 程序的屏幕截圖顯示了其差異添加提示。
  • 最後,直接在文檔中輸入。只需像往常一樣插入光標並開始輸入。
  • 完成更改後,單擊“保存”按鈕以保存文件。
Meld 程序的屏幕截圖突出顯示了其每個文件的保存按鈕。

使用 Meld 和 diff 創建差異文件

除了顯示兩個文件之間的差異之外,您還可以使用 Meld 創建“差異文件”。這些是一小段文本,其中包含有關如何將更改從一個文件版本應用到另一個文件版本的說明。如果您想快速分發代碼更新而不重新共享整個源存檔,這將很有用。

  • 打開要比較的兩個文件。
Meld 程序的屏幕截圖顯示了一個簡單的差異。
  • 單擊窗口右上角的選項菜單。
突出顯示 Meld 選項按鈕的屏幕截圖。
  • 選擇“比較”子菜單。
Meld 選項菜單的屏幕截圖,其中突出顯示了“比較”子菜單。
  • 單擊“格式化為補丁”子選項。
“比較”子菜單的屏幕截圖,其中突出顯示了“格式”子選項。
  • 這將打開一個小窗口,Meld 將在其中打印兩個文件之間的整個差異文件。此時,您可以將此文本複製到剪貼板或將其保存到文件中。要執行後者,請單擊“保存補丁”按鈕。
Meld's Patch 子窗口的屏幕截圖,其中突出顯示了

雖然在 Meld 中創建 diff 文件簡單明了,但在某些情況下,在編輯代碼時可能無法訪問 GUI。為此,您還可以使用該diff程序生成差異文件。

  • 打開終端查看兩個文件是否有差異:

diff hello.c hello-1.c

顯示兩個文件之間簡單差異的終端。
  • 使用-c標誌創建一個簡單的差異文件:

diff -c hello.c hello-1.c > hello.diff

顯示基本差異文件輸出的終端。
  • 或者,使用-u將兩個文本流組合成一個統一差異塊的選項。如果您要更改大量代碼並希望節省磁盤空間,這會很有幫助:

diff -u hello.c hello-1.c > hello.diff

顯示更複雜的統一差異輸出的終端。

使用 diff 文件修補源代碼

如上所述,diff 文件允許您創建易於共享的源代碼更改摘要。但是,diff 本身不能將這些應用於現有文件。為此,請使用 diff 的配套程序patch.

  • 確定 diff 文件試圖更改的原始源代碼:

cat hello.diff | sed 1q

顯示原始源文件標題的終端。
  • 創建原始源代碼的備份:

cp hello.c hello.c.old

  • 運行補丁程序,第一個參數是原始文件,第二個參數是差異文件:

patch hello.c hello.diff

顯示對單個源文件的簡單補丁命令的終端。

請務必注意,差異文件還可以包含跨越多個文件的更改。通過將更新所需的所有文件放在一個目錄中並運行patch < multi-file.diff.

  • 通過將源文件與您的備份進行比較,檢查補丁程序是否成功更新了您的源文件:

diff -y hello.c hello.c.old

顯示新源文件和原始源文件之間視覺差異的終端。

僅供參考: Git 是一個功能強大的跨平台版本控製程序。了解如何使用它來管理 Linux 中的源代碼存儲庫。

經常問的問題

是否可以多次修補文件?

是的。但是,重要的是要注意 diff 文件中的行號值是靜態的。例如,應用在第 1 行添加五行代碼的差異會將整個文件調整五行。雖然現代工具可以補償單個差異的變化,但應用多個差異可能會造成不必要的代碼衝突。

diff 文件類似於 Git 補丁嗎?

是的。diff 和 Git 都使用相似類型的代碼補丁格式。因此,您可以在對源代碼應用更新時互換這兩個實用程序。例如,runninggit apply hello.diff等同於 running patch < hello.diff

您可以將 Meld 與 Git 等版本控製程序一起使用嗎?

是的。Meld 最強大的功能之一是它可以透明地與任何版本控製程序一起工作。這使您能夠輕鬆地在終端界面之外與您的存儲庫進行交互。

為此,請按Ctrl+ N,然後單擊“版本控制視圖”按鈕。接下來,單擊其下方的下拉框並選擇“其他”。這將打開一個小窗口,您可以在其中查看和加載 Git 存儲庫。

圖片來源:Unsplash。Ramces Red 的所有屏幕截圖。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *