不喜歡diff 么?試試Meld吧
Meld 是一個(gè)可視化 diff 工具,它可讓你輕松比較和合并文件、目錄、Git 倉(cāng)庫(kù)等的更改。
Meld 是我處理代碼和數(shù)據(jù)文件的基本工具之一。它是一個(gè)圖形化的 diff 工具,因此,如果你曾經(jīng)使用過(guò) diff
命令并難以理解輸出,那么 Meld 可以為你提供幫助。
這是該項(xiàng)目網(wǎng)站的精彩描述:
“Meld 是面向開(kāi)發(fā)人員的可視化 diff 和合并工具。Meld 可以幫助你比較文件、目錄和版本控制的項(xiàng)目。它提供文件和目錄的雙向和三向比較,并支持許多流行的版本控制系統(tǒng)。”
“Meld 可以幫助你檢查代碼更改并了解補(bǔ)丁。它甚至可以幫助你弄清你一直在避免的合并中發(fā)生了什么。”
你可以使用以下命令在 Debian/Ubuntu 系統(tǒng)(包括 Raspbian)上安裝 Meld:
$ sudo apt install meld
在 Fedora 或類似產(chǎn)品上:
$ sudo dnf install meld
Meld 是跨平臺(tái)的,它有一個(gè)使用 Chocolately 包管理器的 Windows 安裝包。盡管它在 macOS 上不受官方支持,但有可用于 Mac 的版本,你可以使用 Homebrew 安裝:
$ brew cask install meld
有關(guān)其他系統(tǒng),請(qǐng)參見(jiàn) Meld 的主頁(yè)。
Meld 對(duì)比 diff 命令
如果你有兩個(gè)相似的文件(也許一個(gè)是另一個(gè)的修改版本),并想要查看它們之間的更改,那么可以在終端中運(yùn)行 diff
命令查看它們的區(qū)別:
diff output
此例顯示了 conway1.py
和 conway2.py
之間的區(qū)別。表明我:
- 刪除了釋伴和第二行
- 從類聲明中刪除了
(object)
- 為類添加了 docstring
- 在方法中交換了
alive
和neighbours == 2
的順序
這是使用 meld
命令的相同例子。你可以在命令行中運(yùn)行以下命令進(jìn)行相同的比較:
$ meld conway1.py conway2.py
Meld output
Meld 更清晰!
你可以輕松查看并單擊箭頭(左右都行)合并文件之間的更改。你甚至可以實(shí)時(shí)編輯文件(在輸入時(shí),Meld 可以用作具有實(shí)時(shí)比較功能的簡(jiǎn)單文本編輯器)—只是要記得在關(guān)閉窗口之前保存。
你甚至可以比較和編輯三個(gè)不同的文件:
Comparing three files in Meld
Meld 的 Git 感知
希望你正在使用 Git 之類的版本控制系統(tǒng)。如果是這樣,那么你的比較就不是在兩個(gè)不同文件之間進(jìn)行,而是要查找當(dāng)前文件與 Git 歷史文件之間的差異。Meld 理解這一點(diǎn),因此,如果你運(yùn)行 meld conway.py
(conway.py
在 Git 中),它將顯示自上次 Git 提交以來(lái)所做的更改:
Comparing Git files in Meld
你可以看到當(dāng)前版本(右側(cè))和倉(cāng)庫(kù)版本(左側(cè))之間的更改。你可以看到,自上次提交以來(lái),我刪除了一個(gè)方法,并添加了一個(gè)參數(shù)和一個(gè)循環(huán)。
如果你運(yùn)行 meld .
,你將看到當(dāng)前目錄(如果位于倉(cāng)庫(kù)的根目錄,就是整個(gè)倉(cāng)庫(kù))中的所有更改:
Meld . output
你會(huì)看到一個(gè)文件被修改了,另一個(gè)文件未加入版本控制(這意味著它對(duì) Git 是新的,因此在比較之前,我需要 git add
添加該文件),以及許多其他未修改的文件。頂部的圖標(biāo)提供了各種顯示選項(xiàng)。
你還可以比較兩個(gè)目錄,這有時(shí)很方便:
Comparing directories in Meld
結(jié)論
即使是普通用戶也會(huì)覺(jué)得 diff 的比較難以理解。我發(fā)現(xiàn) Meld 提供的可視化在找出文件之間的更改方面有很大的不同。最重要的是,Meld 有一些有用的版本控制認(rèn)知,可以幫助你在不考慮太多內(nèi)容的情況下對(duì) Git 提交進(jìn)行比較。快來(lái)試試 Meld,并輕松解決問(wèn)題。