開發者工具·文字比較
如何讀取統一差異:大塊標題、上下文行和 +/- 標記
· 背景
文字差異 補丁 開發人員工作流程
逐行解碼統一的 diff 格式,從檔案頭和 @@ hunk 範圍到上下文行和更改標記,因此任何工具的修補程式都有意義。
優點、缺點和 @@ 符號的牆 — 從第一次遇到電子郵件或拉取請求中的補丁開始
下載的 `changes.patch` 以類似於熟悉的 diff 輸出的標點符號開頭,但其確切結構很重要。 ToolAcre 寫入兩個標籤,然後為每個比較行寫入一個字元標記。讀取存在的內容比在頭腦中從另一種補丁格式提供欄位更安全。
在純文字編輯器中開啟檔案。前兩行將 UI 提供的左右標籤標識為 `original` 和 `changed`。後續行透過上下文、刪除和新增標記重建比較的文字。
檔案頭行 — 解釋 --- 和 +++ 行、路徑以及 a/ 和 b/ 前綴工具添加
標頭為 `--- original`,接著是 `+++ changed`。在其他工具中,這些前綴可能位於更豐富的補丁語法中,但此匯出器不會新增時間戳記、路徑或元資料。標籤描述的是側面,而不是證明磁碟上存在的檔案。
這個差異很重要,因為 Text diff 接受貼上的字串而不是檔案物件。下載後比較後會建立本機文字報告。將標籤視為儲存庫路徑或修訂標識符將歸因 UI 從未收集的出處。
Hunk 標頭解釋 — 將 @@ -12,7 +12,8 @@ 解碼為起始行和每側的行數
`toUnifiedText` 中沒有以 `@@` 開頭的行。該函數直接映射兩個標籤之後的所有行。因此,此輸出沒有要解碼的大範圍,下載的文字中沒有嵌入起始行 /count 對。
行號在呈現的瀏覽器視圖中仍然可用,其中行帶有左側和右側位置。匯出選擇更簡單的表示形式。如果下游程式需要標準完整的統一區塊,請驗證相容性,而不是假設 `.patch` 擴充功能提供缺少的語法。
ToolAcre 不會發出 @@ hunk 標頭,因此沒有可解碼的標頭
前導空格標記未更改的行,減號標記左側刪除,加號標記右側新增。 UI 可以在視覺上折疊長時間相等的執行,但 `lastDiff` 保留完整結果並下載序列化所有行。沒有跳過標記進入補丁字串。
大綱提到了預設的三個上下文行。三是由視覺折疊調用使用,而不是由匯出使用。合併這些路徑會低估下載的內容。表示和序列化共享行,但應用不同的轉換。
下載標記每一行且不使用三行上下文預設值
將左 `a b` 與右 `a c` 進行比較。匯出的行是兩個標籤,然後是空格-a、減號-b 和加號-c。從上到下閱讀表示 `a` 保留,`b` 離開原始狀態,`c` 進入更改的一側。
修改被表示為相鄰的刪除和新增。該格式並未將其命名為「已修改」。如果重複的行允許另一次對齐,則序列可能看起來不同,同時仍然考虑每個輸入行。
工作範例:讀取 ToolAcre 實際匯出的完整補丁形流
普通、上下文和完整的統一 diff 格式都有自己的規範和歷史,但這些規範和歷史並未由此處使用的來源集實現或記錄。本文沒有說明為什麼一種格式變得流行或清單欄位 ToolAcre 不發出。
當另一個工具必須套用修補程式時使用版本控制指令。 ToolAcre 的下載作為便攜式審查工件很有用,但儲存庫不包含補丁解析器或應用函數,證明它可以透過任意補丁使用者進行往返。
完整的統一、上下文和正常格式比較需要外部資源
二进制補丁、重命名標头、模式更改和應用程序不在此路線之外。该文字不包含對象標識符或共同祖先。它不能簡單地表示存儲庫操作,因為它的標記看起來很熟悉。
匯出器还反映活動的比较選項。在大小寫或空白標準化之後被認為相等的行僅攜帶原始的左側文字,因此補丁形文件不是鬆散匹配下兩個輸入的逐字節重建。
重點:差異是一個壓縮的故事 - 總結閱讀順序並注意 ToolAcre 的文字比較如何顯示與突出顯示的行相同類型的更改以供快速查看
首先讀取兩個標籤,然後依序解釋每個帶有前綴的行。如果您需要渲染行號,請返回瀏覽器視圖。如果您需要完整的標準區塊,請使用記錄合約的工具來產生它們。
ToolAcre 提供了一種紧凑的方法來在頁面之外进行比较,而無需聲称實現每個補丁功能。這個更狭窄的名称(補丁形輸出)使期望與确切的功能保持一致,並避免對應用程序兼容性的錯誤承诺。