2012-12-19 111 views
4

我在創建項目中的子模塊時遇到問題。如果我直接在存儲庫根目錄下創建子模塊,一切正常。如果子模塊更深,則不會克隆存儲庫。將子模塊克隆到目錄中

例如,這按預期工作:

git submodule add git://someproject.com/.git someproject 

然而,當我運行下面的命令,該項目被添加到.gitmodules庫被創建,但沒有代碼被拉低(即使在git submodule update --init之後)。該命令不會產生任何輸出。

git submodule add git://someproject.com/.git lib/someproject 

回答

2

看來以前嘗試添加子模塊時,我的存儲庫處於不良狀態。我能克隆子模塊執行這些步驟後正確:

  1. 刪除子模塊:rm -rf lib/someproject
  2. .gitmodules文件
  3. 刪除子模塊從.git/config文件中刪除子模塊
  4. 刪除.git/modules/someproject

然後運行git add submodule命令再次合作。非常感謝所有將我推向正確方向的回答者!

+0

這是正確的答案。這個問題是因爲庫我試圖使作爲核心項目的子模塊是空的,命令「混帳子模塊添加」做了壞事。 – zen11625

3

嘗試運行

git submodule init 
git submodule update 

您添加子模塊之後。

更新1

試試這個:

cd lib/someproject 
git status 

你應該看到類似# Not currently on any branch.

如果沒有,有沒有存在混帳回購協議,你可能已經在一個git絆倒錯誤,如果您看到上述消息,請執行以下操作:

git checkout master 
git pull 
+0

這似乎是合乎邏輯的,我做了嘗試。不幸的是,在運行這兩個命令後都沒有發生任何事情。 (沒有輸出,沒有新文件,沒有)。 – andypaxo

+0

新增更新1,看看是否能工程 –

+0

陌生人和陌生。 'git status'輸出'分支(空)。初始提交'。 'git checkout master'輸出'錯誤:pathspec'master'與git已知的任何文件不匹配 目錄中只有一個文件,一個'.git'文件。整個內容是'gitdir:../../。git/modules/lib/someproject'。 (感謝您的幫助,繼續由路) – andypaxo

1

你需要運行下面的命令

git submodule update --init lib/someproject 

對於運行和子模塊更新的時候,而不是在整個工作拷貝某些原因混帳只查找根目錄下。

另外,還要確保您的.gitmodules文件包含這樣一個條目:

[submodule "someproject"] 
    path = lib/someproject 
    url = git://someproject.com/.git 

而且你.git/config文件包含:

[submodule "someproject"] 
    url = git://someproject.com/.git 

文檔:

http://git-scm.com/book/en/Git-Tools-Submodules

+0

我認爲這將是類似的東西。不幸的是git的報告'錯誤:pathspec「的lib/someproject」不匹配已知git' – andypaxo

+0

添加了'.gitmodules'文件應該是什麼樣的,以及在'git的/ config'文件 – daegren

+0

好吧任何文件(S)。現在解決了問題。我會提高你的答案,因爲它讓我看着正確的地方。不僅在.git/config文件中存在問題,而且在.git/modules文件夾中也存在問題! – andypaxo

0

我剛剛得到通過閱讀s O'Reilly書中的ubmodule部分和作者在添加子模塊時提到的內容(在他的示例中,使用git手動添加到項目根目錄中的克隆的repo),包括尾部斜槓導致它將文件夾添加到索引與創建gitlink。這聽起來很愚蠢,但也許嘗試在添加之前將目錄更改爲lib,以確保這不會發生在您身上,因爲您的子模塊的路徑中有斜線。

這也可能是'submodule add'的一個特性,它只接收路徑和遠程URL,並在寫入配置時從路徑推斷子模塊名稱。也許手動編輯gitmodules和config條目以確保子模塊的命名不使用'lib /',但路徑包含它。