本篇文章更新時間:2023/07/29
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
最近因為做一個 WordPress 專案,把 wp-content
目錄整個做 Git 版本控制,但不知道為啥沒把一些外掛的目錄給容納進去。
一開始就順手補上外掛資料後就沒事,直到最近合併版本的時後出問題,才想說要來認真解決這問題!
第一個問題就是:「那本機與線上端的版本差在哪?」
然後:「是為什麼沒有納入 Git 版控?」
查了一下「比對目錄差異」這方面的解答,分以下幾個實用解法:
-
比對兩目錄下檔案差異(不包含內容)
rsync -avun folder1 folder2
-
比對兩目錄下檔案差異(包含內容,去除 DS_Store 資訊)
diff -rq folder1 folder2 | grep -v .DS_Store
rsync
這指令真的是神來一筆!本來就是做同步用的,搭配 dry-run
模擬跑同步就會知道少哪些檔案了。
而問這個問題,很常會被視為是想知道「檔案內容」差異。所以 diff
這常見答案自然少不了它。
然後再補一個常用的
- 計算目錄下檔案數量
find ./folder -type f | wc -l
既然知道兩個目錄的差異檔案後,那「什麼原因導致沒有被納入」?
就是這個指令: git check-ignore -v path/to/ignored/file
反查到底是哪一條或是哪個 .gitignore
檔案阻止納入版控。
結果... 當然是自己耍蠢,太順手把常用的 .gitignore
給寫進去導致。
參考資料:
- 如果想安裝比對的 App,Meld fork 版本 或 Meld 原版 都可以參考。
- What directory comparison tools can I use on OS X?
- How do you check why a file is not in the git status?