2012-01-13 90 views
9

我創建了一個git子模塊並將其推送到我們的主存儲庫。這工作得很好,我可以通過瀏覽器在存儲庫中看到子模塊。git子模塊更新失敗,但在一臺機器上出錯,但在另一臺機器上工作

爲了測試它工作正常,我試圖讓源是一個新的構建樹。 首先我跑git submodule init,然後git submodule update <submodule-name>

這種失敗,錯誤:

error: pathspec 'x/mypkg' did not match any file(s) known to git. Did you forget to 'git add' 

我嘗試添加到.gitmodules的URL子模塊,但沒有運氣。

回答

3

這很可能是因爲您或團隊中的某個人在您的子模塊中發生了未發佈(已提交但未推送到遠程服務器)的更改。然後他們發佈了超級項目,並引用了git服務器上不存在的子模塊中的git commit。所以git試圖拉下它找不到的特定子模塊git commit ID。

如果更改位於計算機的其他位置或另一臺計算機上,則會出現這種情況。

要解決該問題,請轉到引用該提交併將子模塊更改發佈(推送)到服務器的存儲庫。或者更改子模塊以指向不同的提交ID。

+0

我想我有一個非常相似的情況,但還不確定。我有一個庫,我添加爲一個新的子模塊,另一個子模塊使用這個庫。我首先修改了庫,提交併推送它,然後修改並推送使用它的子模塊。沒有人在我的情況下修改這些。奇怪的是,我無法更新使用該庫的子模塊。 – 2012-01-13 01:30:42

+0

@GauravSinha無論如何,如果你在'git submodule update'上得到錯誤,那是因爲git repo找不到子模塊指向的git commit ID。由於您在創建「新鮮樹」時,要麼是URL錯誤,要麼您沒有按子模塊指向的提交。 – 2012-01-13 01:44:06

+0

似乎它可能是錯誤的URL,讓我試試看,手指交叉.. – 2012-01-13 18:20:07

1

爲了獲得新的子模塊到其他倉庫,我相信你需要運行git submodule init一次纔開始運行git submodule update;這將在.git/config中註冊來自.gitmodules的新子模塊。

+0

我在運行git submodule update命令之前運行過git submodule init。這不利於我們。更新我的問題以避免混淆。 – 2012-01-13 01:01:44

13

我還在嘗試更新子模塊時使用TortoiseGit收到此錯誤,該子模塊不在索引中。也就是說,它們存在於.gitmodules中,但尚未正確添加到存儲庫中。

解決方法是使用.gitmodules中指定的路徑手動重新添加它們。您可以使用TortoiseGit UI或每個模塊的命令行中運行這個...

git submodule add <url> <path> 

Re-adding a git submodule

(我知道這可能是不適合原來的海報的解決方案,但希望它有助於其他人使用谷歌搜索。)

+0

我不得不添加' -force'來完成這個工作。 – 2018-02-23 17:25:25

相關問題