如何使用diff 和 patch 命令對檔案進行協作?
導讀 | 如果你曾經試圖通過電子郵件或聊天來協作處理檔案,並且發現自己試圖描述需要修改的地方,那麼你會喜歡diff和patch 的。 |
我編輯過很多文字檔案。有時是程式碼。其他時候是角色扮演遊戲(RPG)、程式設計書籍或一般信件的書面文字。有時候,做一個修改,而能讓我的協作者把我的修改和他們原來寫的東西進行比較就更好了。許多人預設使用辦公套件(如 LibreOffice)的註釋或更改跟蹤功能。不過有時更簡單的工具更有意義,為此,你可以看看像 diff 和 patch 這樣的工具的程式設計歷史,它們為跟蹤和應用共享檔案的變化提供了標準化的格式。
即使對於簡單的檔案,在同步兩個檔案時也有複雜性。一些專案被改變,另一些被保留,新的內容被新增,還有一些保持不變,但被移到檔案的不同位置。如果接受所有的變化,並且用新檔案替換舊檔案,就很難複製變化。它也是整體不透明的。如果變化很多,就很難挑出到底發生了什麼變化。
通過 diff ,你可以建立一個檔案變化的記錄,通過 patch 你可以在舊版本上“重放”這些變化,使其與新版本保持一致。
假設你和我正在合作編寫一個描述如何泡茶的檔案。
到目前為止,檔案 tea.md 包含原始的複製貼上來的內容:
燒開水。
加熱茶壺。
在茶壺中加入茶和水。
在茶壺上放置一個茶葉濾網。
浸泡 6 分鐘。
將茶倒入杯中。
加入牛奶。
這似乎很合理,但總有一些優化可以做,所以你把檔案發給我改進。為了澄清泡茶過程,我把檔案複製為tea-revision.md,並進行編輯,最後是這樣的:
在烤箱的抽屜中加熱茶壺。
燒開水。
將茶葉放入茶葉濾網。
將濾網和水加入茶壺。
浸泡 6 分鐘。用茶壺罩保溫。
將茶倒入杯中。
可以選擇加入溫牛奶。
正如預期的那樣,一些專案(“燒開水”和“將茶倒入杯中”)沒有變化,而其他行(“加熱茶壺”)則有增加。有些行是全新的,有些行是相同的,但順序不同。
diff 工具會顯示兩個檔案之間的差異。有幾種不同的方法來檢視結果,但我認為最清楚的是 —unified(簡寫為 -u)檢視,它顯示哪些行被增加或減少了。以任何方式改變的行都被視為先減後增的行。預設情況下,diff 將其輸出列印到終端。
向 diff 提供舊檔案,然後是新檔案:
$ diff --unified tea.md tea-revised.md --- tea.md 2021-11-13 10:26:25.082110219 +1300 +++ tea-revised.md 2021-11-13 10:26:32.049110664 +1300 @@ -1,7 +1,7 @@ +在烤箱的抽屜中加熱茶壺。 燒開水。 -加熱茶壺。 -在茶壺中加入茶和水。 -在茶壺上放置一個茶葉濾網。 -浸泡 6 分鐘。 +將茶葉放入茶葉濾網。 +將濾網和水加入茶壺。 +浸泡 6 分鐘。用茶壺罩保溫。 將茶倒入杯中。 -加入牛奶。 +可以選擇加入溫牛奶。
行首的加號(+)表示在舊檔案中增加了一些內容。行首的減號(-)表示被刪除或改變的行。
補丁檔案就是將 diff —unified 的輸出放到一個檔案中。你可以用標準的 Bash 重定向來做這件事:
$ diff -u tea.md tea-revised.md > tea.patch
該檔案的內容與輸出到終端的內容完全相同。我喜歡在 Emacs 中檢視補丁檔案,它對每一行進行顏色編碼,取決於它是被新增還是被減去。
Emacs中的補丁檔案
一旦我有了補丁檔案,我就可以把它發給你,讓你審查,並且可以選擇應用到你的舊檔案中。你可以用 patch 命令來應用一個補丁。
$ patch tea.md tea.patch
增加了一些行,減少了一些行,最後,你得到了一個與我的版本相同的檔案:
$ cat tea.md 在烤箱的抽屜中加熱茶壺。 燒開水。 將茶葉放入茶葉濾網。 將濾網和水加入茶壺。 浸泡 6 分鐘。用茶壺罩保溫。 將茶倒入杯中。 可以選擇加入溫牛奶。
你可以給一個檔案打多少次補丁,這是沒有限制的。你可以對我的修改進行迭代,生成一個新的補丁,然後發給我稽核。傳送修改內容而不是結果,可以讓每個貢獻者審查修改的內容,決定他們要保留或刪除的內容,並準確地記錄過程。
在 和 macOS 上,你已經有了 diff 和 patch 命令。在 Windows 上,你可以通過 Cygwin 獲得 diff 和 patch,或者使用 Chocolatey 搜尋 diffutils 和 patch。
如果你曾經試圖通過電子郵件或聊天來協作處理檔案,並且發現自己需要 描述 需要修改的地方,那麼你會喜歡 diff 和 patch。一個結構嚴謹的檔案,如程式碼或以行為單位的 Markdown,很容易進行差異比較、補丁和維護。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2850388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 差異檔案(diff)和補丁檔案(patch)簡介
- Git - 使用命令和P4Merge進行diffGit
- Diff and Patch
- 探究如何使用敏捷專案管理進行團隊協作?敏捷專案管理
- Git 打補丁-- patch 和 diff 的使用(詳細)Git
- Git 打補丁– patch 和 diff 的使用(詳細)Git
- 如何使用git 生成patch 和打入patchGit
- 如何透過文件協作進行專案管理?專案管理
- Mac電腦如何對檔案進行分類和整理Mac
- C#如何使用HttpClient對大檔案進行斷點上傳和下載C#HTTPclient斷點
- 如何批次對檔案進行重新命名?
- 在Linux中,如何進行備份或歸檔檔案(tar 命令)?Linux
- Vue原始碼學習(十四):diff演算法patch比對Vue原始碼演算法
- 如何使用scp進行遠端複製檔案?
- Java中使用jcifs庫操作SMB協議進行檔案操作Java協議
- 如何利用 github 進行多人協作開發Github
- 如何在命令列中使用 ftp 命令上傳和下載檔案命令列FTP
- 如何使用curl命令下載檔案
- 使用 7-Zip 進行檔案分割與合併(命令列示例)命令列
- Linux下如何對目錄中的檔案進行統計Linux
- 如何讓IT團隊和安全團隊之間更好地進行協作
- Mac電腦如何將檔案進行分類和整理?Mac
- 使用scp命令在多個Linux系統間進行檔案複製Linux
- 一行命令為專案檔案新增開源協議頭協議
- vue對CSV檔案進行表格預覽Vue
- 專案經理在專案面對平級跨部門如何進行協調?
- 如何使用 appium+pytest 進行多機並行執行不同 case 檔案APP並行
- 透過線上的文件協作進行專案管理專案管理
- node使用multer進行檔案上傳
- 如何使用 logrotate 命令保持日誌檔案更新logrotate
- 技術分享 | 使用 sync_diff_inspector 對兩個 MySQL 進行資料校驗MySql
- 如何使用任務管理軟體改進協作策略?
- 在linux系統中對檔案進行分割Linux
- WINDOWS下對NIGNX日誌檔案進行限制Windows
- LINUX 的patch 製作,及打patchLinux
- 『學了就忘』Linux檔案系統管理 — 61、使用parted命令進行分割槽Linux
- 如何使用Python、Transformers和scikit-learn對文字進行分類?PythonORM
- 如何在Linux中進行檔案切割操作?Linux