如何在 Linux 中使用差異文件
Diff 是 Unix 系統的命令行工具,它允許您比較兩個文件或目錄並查看它們之間的差異。它非常適合比較文件的新舊版本以查看更改內容。在本文中,我們向您展示瞭如何diff
在 Linux 中輕鬆地比較文件。
使用 diff 比較文件
- 打開一個終端窗口。
- 鍵入
diff
要比較的兩個文件的路徑。在這種情況下,我使用以下命令在桌面上比較兩個小型 C 程序:
diff ~/Desktop/hello.c ~/Desktop/hello-1.c
- 按Enter提交命令。結果顯示將向您顯示文件之間的所有不同行。比較的行號將顯示為“1c1”,這意味著第一行已更改,並且發現了以下差異。
- 要並排查看文件及其差異,請
-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 將在您修改任一版本時繼續分析文檔的更改,您可以隨時按Ctrl+撤消更改。Z
- 要將更改從一個文件複製到另一個文件,請單擊更改之間的黑色小箭頭。例如,單擊左側的箭頭將使用左側文檔的行覆蓋右側的文檔。
- 也可以在不覆蓋的情況下將行插入到文檔中。如果按住該Ctrl鍵,您會看到上一步的箭頭變成加號。單擊該圖標可打開一個小對話框,您可以在其中選擇插入新行的位置。
- 最後,直接在文檔中輸入。只需像往常一樣插入光標並開始輸入。
- 完成更改後,單擊“保存”按鈕以保存文件。
使用 Meld 和 diff 創建差異文件
除了顯示兩個文件之間的差異之外,您還可以使用 Meld 創建“差異文件”。這些是一小段文本,其中包含有關如何將更改從一個文件版本應用到另一個文件版本的說明。如果您想快速分發代碼更新而不重新共享整個源存檔,這將很有用。
- 打開要比較的兩個文件。
- 單擊窗口右上角的選項菜單。
- 選擇“比較”子菜單。
- 單擊“格式化為補丁”子選項。
- 這將打開一個小窗口,Meld 將在其中打印兩個文件之間的整個差異文件。此時,您可以將此文本複製到剪貼板或將其保存到文件中。要執行後者,請單擊“保存補丁”按鈕。
雖然在 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 的所有屏幕截圖。
發佈留言