# Git diff 產生檔案差異路徑與差異檔 > 取得檔案差異路徑沒頭緒? > 版本A與版本B之間到底改了哪些檔案不知道? > 指令下下去就對了! 🤟 > ###### tags: `git` `git-diff` ## 取得檔案差異路徑 首先以這張圖當範例 <img src="https://cornpic.com/images/2020/09/04/5ULwHlP.png"> 假如今天希望取得 04/23 到 05/13 之間所有改動檔案的「路徑」, 該怎麼做呢? 此時我們可以透過以下指令來取得: ```shell= git diff-tree -r --no-commit-id --name-only --text 97d7faf 5d147f1 > ./diff.txt ``` 其中 `97d7faf` 就是 04/23 的 commit id,而 `5d147f1` 就是 05/13 的 commit id。 我們就是==將這兩個 commit id 之間所有的檔案做比對==,然後把差異檔的路徑給轉成 diff.txt。 實際 diff.txt 內容如下 ```bash= "sql/HelloWorld\350\262\274\346\250\231\350\250\255\345\256\232.sql" src/main/java/com/chris/crm/abc/comm/action/CommAction.java src/main/java/com/chris/crm/abc/comm/dao/AbcDAO.java src/main/java/com/chris/crm/abc/comm/service/AbcService.java src/main/java/com/chris/crm/abc/comm/service/AbcServiceImpl.java ``` 看到這可能會發現,第二行以下路徑都很正常,但第一行到底是怎麼回事? 原來是檔名含有中文字,造成讀取編碼錯亂了~😱 身為工程師沒在怕,此時再輸入以下這行: ```shell= git config --global core.quotepath false ``` 再重新執行我們前面 git diff-tree 的指令,正常的中文檔名就產生囉! * 結果如下 ```bash= sql/HelloWorld就是這麼樸實無華且枯燥.sql src/main/java/com/chris/crm/abc/comm/action/CommAction.java src/main/java/com/chris/crm/abc/comm/dao/AbcDAO.java src/main/java/com/chris/crm/abc/comm/service/AbcService.java src/main/java/com/chris/crm/abc/comm/service/AbcServiceImpl.java ``` ## 取得版本差異檔案 同理,我們能透過以下的指令來產生兩個 commit id 之間的差異檔,再將其壓縮成 diff.zip ```shell= git archive --format=zip --output=./diff.zip HEAD $(git diff-tree -r --no-commit-id --name-only --text 97d7faf 5d147f1 ) ``` 壓縮檔結果 <img src="https://cornpic.com/images/2020/09/04/GLQmV8Z.png"> 內容是有按照階層放置檔案的,而不是一打開就看到所有檔案在最上層,好處就是可以在專案最上層直接把壓縮內容丟進去做替換! 以上就是這次的小小學習筆記~ 👍🏻 👍🏼 👍🏽
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up