Pages - Menu

2023年7月28日 星期五

[Git]git submodule 下載失敗

睡睡念

同事的新專案有用到 git的submodule,
之前也用過一次了,想說應該還好,
但這次就是怎麼驗證,怎麼不過。


正文

都是出現這個錯誤

Cloning into ‘/drone/src/BackendSharedLib’…
Host key verification failed.
fatal: Could not read from remote repository.




![[145-fig.1.jpg]]

但之前寫的專案就沒這個問題,找阿找,最後終於發現,
差異在 建立 submodule的時候。

打開 .gitmodules 上面會寫 url的位置

[submodule "SMSBackendSharedLib"]
    path = SMSBackendSharedLib
    url = git@github.com:ABC/sms-backend-sharedlib.git

本來是上面這種寫法,他會用ssh的方式去抓submodule的檔案。

所以要把url改成

[submodule "SMSBackendSharedLib"]
    path = SMSBackendSharedLib
    url = https://github.com/ABC/sms-backend-sharedlib.git

再來用

git submodule update --init --recursive

本機也可以下載了。

本來還懷疑是不是drone clone submodule的時候,用到錯誤的使用者。
結果一查根本沒有使用者。
可以用下面的指令查查

git config --list

git config user.name
git config user.email

簡單解釋一下 submodule,
以下從chatGPT抄來的。


在 Git 中,Submodule 是一個允許您在 Git 倉庫中包含另一個 Git 倉庫的機制。通過使用 Submodule,您可以將一個 Git 倉庫作為另一個 Git 倉庫的子目錄進行管理。這對於管理大型專案或共享程式庫非常有用。


當您在 Git 倉庫中新增 Submodule 時,它實際上是包含另一個 Git 倉庫的指向。當您 clone 或 pull 主倉庫時,Git 只會下載 Submodule 的指向,而不會將 Submodule 的內容一併下載。這樣可以節省空間和時間,同時還可以使主倉庫更加輕便。


如果您想要更新 Submodule 的內容,可以使用 git submodule update 命令來下載 Submodule 的內容。當您修改 Submodule 的內容時,您需要先進入 Submodule 的目錄,對其進行 commit 和 push,然後返回主倉庫,對 Submodule 的指向進行 commit 和 push。這樣可以確保 Submodule 的指向指向正確的 commit。


總之,Submodule 是一個非常有用的機制,可以使 Git 倉庫管理更加靈活和有效。

沒有留言:

張貼留言