2016-07-31 45 views
6

我有一個存儲庫,它有兩個子模塊。當我運行git submodule initgit submodule update Git的抱怨,並出現以下錯誤:Git索引掛在舊子模塊路徑上?

fatal: no submodule mapping found in .gitmodules for path 'AppName.xcodeproj/..Vendor/AFNetworking'

我的子模塊並不都是在同一個目錄,我決定清理項目。我曾經有一個名爲Vendor的目錄,其中包含我的一些子模塊,但我按照指示here從git中刪除子模塊。然後,我將這些子模塊重新添加到名爲submodules的新目錄中。

我的一個子模塊是AFNetworking庫,我在最初的供應商目錄中添加了它作爲子模塊。我前一段時間刪除了它,並重新添加它作爲清理過程的一部分。該應用程序似乎構建得很好,我的git submodule命令工作正常。現在,當我在不同的機器上檢查時,它會按照上述說明失敗。

.gitmodules文件看起來像這樣:

[submodule "submodules/AFNetworking"] 
    path = submodules/AFNetworking 
    url = https://github.com/AFNetworking/AFNetworking.git 
[submodule "submodules/LNPopupController"] 
    path = submodules/LNPopupController 
    url = https://github.com/MosheBerman/LNPopupController.git 

這似乎是正常的,因爲git的知道在哪裏我的模塊,並且所有應該很好。這同樣是我.git/config文件的真實:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
    ignorecase = true 
    precomposeunicode = true 
[remote "origin"] 
    url = [email protected]:MosheBerman/theshmuz.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
[submodule "submodules/AFNetworking"] 
    url = https://github.com/AFNetworking/AFNetworking.git 

的錯誤是微妙,過了好一會兒,我意識到這一點,但我注意到,該錯誤消息引用Vendor目錄,不再存在。

我打開./git/index,將cat的輸出導入文本文件並使用文本編輯器。果然,AppName.xcodeproj/../Vendor/AFNetworking/出現在索引中。這可能是一個糟糕的gitlink?我該如何清理這個問題,這樣我才能正常初始化和構建我的回購?

回答

1

我曾試圖刪除從根目錄之前包含AppName.xcodeproj的指數,像這樣的緩存參考:

git rm --cached /Vendor/AFNetworking

於是,我重新創建文件夾層次,我嘗試添加一個虛擬文件內/Vendor/AFNetworking.我也嘗試在Vendor內添加名爲「AFNetworking」的文件。添加,然後刪除這些文件沒有辦法。

我又看看這個問題,發現a blog post (link)這解釋了檢查索引的正確方法。事實證明,我的指數有它的怪異參考舊子模塊:

AppName.xcodeproj/../Vendor/AFNetworking.

的解決方案是從索引中刪除與確切的上市文件,像這樣:

git rm --cached AppName.xcodeproj/../Vendor/AFNetworking

然後我成功運行了git submodule update。它看起來像索引並不總是匹配unix文件系統相對路徑,但在某些情況下它可能更具體。 Pro Git書有一些信息(在第9版的印刷版Chapter 10 online中),這讓我懷疑這一點,但是博客文章讓我明白如何打開索引。