VSTS 建置失敗:no url found for submodule

早先,我利用 VSTS 來自動建置我的一個 GitHub repo,設定完成後,每當我推送任何修改至遠端主機的 develop branch,VSTS 都能夠成功建置,直到我在那個 repo 裡面加入了 submodule......

GitHub 子模組與 VSTS 建置

如果要在 repo A 的專案裡面引用 repo B 的程式碼,可以用 git submodule add 指令來把 repo B 以子模組(submodule)的形式加入到 repo A:

git submodule add [repo A 的 url] [本機目錄名稱]

例如:

cd \work\ProjectA
git submodule add https://github.com/huanlin/HuanlinLib.git Source\HuanlinLib

上述指令可將 GitHub 的 HuanlinLib repo 以子模組的形式掛在 \work\ProjectA\Source\HuanlinLib 目錄下。

也就是說,本機資料夾 /work/ProjectA 裡面是主專案的 repo 副本,而 /work/ProjectA/Source/HuanlinLib 會有另一個 repo 的副本。如果我修改了子模組裡面的檔案,也是利用 commit 和 push 來將變動推送至遠端主機,就跟操作一般的 repo 一樣。

另一方面,我還必須在 VSTS 的專案設定啟用「Checkout submodules」選項,以便在每次建置專案時自動從 GitHub 上面把子模組的程式碼一併拉下來:



背景大致介紹完畢,接著說明問題。

問題

在我用前述指令加入子模組之後,父層 repo(即上例的 ProjectA)的根目錄底下會產生一個名為 .gitmodule 的檔案,內容如下:

 [submodule "Source\\HuanlinLib"]
 path = Source\\HuanlinLib
 url = https://github.com/huanlin/HuanlinLib.git

接著,開始在父層 repo 的專案裡面改東改西,然後 commit、push。

沒多久,Windows 桌面的右下角就浮出一個通知,告訴我 VSTS 建置失敗:


打開瀏覽器,登入我的 visualstudio.com 入口來查看詳細的建置紀錄。我看到這個錯誤訊息:

##[command]git submodule sync --recursive
##[command]git -c http.https://github.com.extraheader="AUTHORIZATION: basic ********" submodule update --init --force --recursive
fatal: No url found for submodule path 'Source/HuanlinLib' in .gitmodules
##[error]Git submodule update failed with exit code: 128

底下是截圖:


上網爬了一些文,試了一些方法,結果都沒用。似乎沒有人碰到跟我一樣的狀況,就這樣一兩個鐘頭過去了......

解法

在上網爬文的過程中,腦袋曾閃過一個念頭:該不會是那個 .gitmodule 檔案裡面的路徑名稱使用兩個反斜線的緣故吧?

轉念立刻反駁自己:「應該不會吧,那個檔案是我用 git 指令產生的,完全沒有手動改過啊。」

就在所有上網爬文找到的方法都無效之後,抱著姑且一試的想法,把 .gitmodule 裡面的兩個反斜線都改成一個斜線:

[submodule "Source/HuanlinLib"]
 path = Source/HuanlinLib
 url = https://github.com/huanlin/HuanlinLib.git

然後,VSTS 竟然可以成功取出子模組的程式碼檔案,並成功建置專案了。

兩個反斜線的代價  😵

沒有留言:

技術提供:Blogger.
回頂端⬆️