Git Submodule 除錯

前言:
 
網路上已經有很多關於 Git Submodule 的介紹,使用方式、使用時機等等,都有很可靠的資訊可以參考,因此本篇文章並不會再贅述使用方法,而是著重在泰勞之前遇到的問題,經驗分享以及解決的辦法。 

前情提要:

我們先依照下列步驟製造出一個類似的場景,先新增一個 Submodule,然後接著將 Submodule 裡面的 .git 刪除!
$ git submodule add <repository> submodule
$ git commit -m "Add submodule"
$ cd  submodule
$ rm -rf .git

這麼做當然是為了要模擬問題,但是為什麼要這麼做?原因是泰勞曾經拿過一個 Patch,它只是一個目錄,並非 Git Patch,因此我用 cp 將其複製到工作區裡面,並且加入至 Git Stage,就在此時,問題發生了,是我從來沒有看過的錯誤訊息!

fatal: Pathspec 'xxx' is in submodule

不管我怎麼做,submodule 目錄都無法被加入!就如同上圖,錯誤訊息顯示此目錄底下的檔案在 Submodule 裡面,泰勞可以合理推測當時那個 Patch,原先在別人手上時,是以 Submodule 的方式做管理,而發出  Patch 的步驟是直接將目錄複製出來給我們,並沒有選擇 Git Patch,才會導致這樣的問題。

解決方式並不複雜,透過 Git 將其刪除,然後再加回來即可。
$ git rm -rf --cached submodule
$ git add submodule/
$ git commit -m "Add folder"


這個問題應該不會太常遇到,復現此現象也只是想讓大家知道有這種款式的錯誤訊息,不過,上網查詢資料時,也是有蠻多人表示他們是不小心刪除 .git 造成的 XD

參考資料:
[StackOverflow]Git: fatal: Pathspec is in submodule

留言

這個網誌中的熱門文章

程式語言常用之符號與詞彙 - 中英文對照

什麼是 Bootloader?

Repo 實用指令