1. 程式人生 > 實用技巧 >專案上傳git過程中,在git add步驟有幾個檔案怎麼也執行不成功(子模組問題)

專案上傳git過程中,在git add步驟有幾個檔案怎麼也執行不成功(子模組問題)

刪除 git submodule (git 庫子模組)

有兩種情況會建立 git submodule (git 子模組)
  • 顯性方式新增:使用 git submodule 命令將其他git庫作為子目錄新增,即子模組
  • 隱性方式新增:使用 git add 新增,如果某個子目錄本身是一個 git 庫,就自動新增為子模組,不再遞迴新增該目錄下面的檔案
那麼這兩種方式新增的子模組有什麼不同?子模組有什麼副作用?如何刪除模組呢?

兩種方式新增模組,效果略有不同

  • 隱性方式新增,看似直接將目錄加入版本庫,而實際上是加入一個和目錄名同名的 submodule 條目;
  • 顯性方式新增,除了像隱性方式在 index/commit 中建立submodule 條目外,還會建立一個 .gitmodules 檔案,也會在 .git/config 中建立相應記錄。具體參見 git submodule 命令。

子模組的副作用

有時,並未意識到目錄按照模組方式新增。例如在用 gistore 備份檔案和目錄時,當某個目錄本身用 git 做了版本控制,就會以子模組的方式新增目錄。 如何將子模組按照正常的目錄形式新增到版本控制系統呢?用下面的方法做不到:
  • 刪除子模組的 .git 目錄,即將子模組下的 git 版本庫刪除
  • 當執行 git add 時報錯: fatal: Path '... ...' is in submodule '...'
那麼,該怎麼辦呢?

如何刪除子模組

使用 git 命令即可刪除子模組
git rm --cached path/to/submodule
對於顯性定義的子模組,還要刪除 .gitmodules 檔案和 .git/config 檔案中的相關條目。