記錄關於 git diff 產生 patch 檔的問題及解決過程
在使用 git diff 產生 patch 檔,發現應用時無法通過驗證,查看內容後也沒有發現任何可疑符號或問題。
即使是很簡單的改動,也無法通過驗證:
1diff --git a/src/layouts/BlogPost.astro b/src/layouts/BlogPost.astro2index a910b96..81c4fbc 1006443--- a/src/layouts/BlogPost.astro4+++ b/src/layouts/BlogPost.astro5@@ -9,6 +9,7 @@ import {comment, config} from "../consts";6 import ScrollToTop from '../components/ScrollToTop.astro'7 import {t}from '../i18n/utils'8
9+const a = 'askjldfjlkasjfdklajsdlkfjsajdfljaslkfjlsajdlf'10 const {frontmatter = {comment: false, donate: false, toc: false, mathjax: false, mermaid: false}} = Astro.props11 ---
但是如果應用 GenAI 產生的 patch 範例,卻沒有問題:
1diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro2index 2798b8e..9bce191 1006443--- a/src/components/BaseHead.astro4+++ b/src/components/BaseHead.astro5@@ -3,7 +3,12 @@ import '../styles/index.css'
想到之前都是透過 WSL 執行 git 指令,因此懷疑可能是因為編碼或是 Windows 和 Linux 之間的換行符號差異導致的問題。
對照組實驗
原始 git 指令
1git diff HEAD -- src/layouts/BlogPost.astro > patches/ori_blog.patch
強制轉換 utf8 指令
1git diff HEAD -- src/layouts/BlogPost.astro | Set-Content -Encoding utf8 patches/blog.patch
可以看到兩個檔案的大小不同,這進一步證實了它們的編碼存在差異。
用 notepad++ 分別打開檔案,兩者的編碼也是不一樣的
使用 blog.patch 檔案驗證成功。
結論
在使用 Windows 作業系統時,需要警覺編碼問題或換行符號差異可能會導致 git patch 驗證失敗。由於 git 對於 patch 的編碼格式有特定要求,強制使用 UTF-8 可以確保所有符號被正確識別,從而避免驗證失敗。