2013-02-26 140 views
2

創建一個git子模塊後,通過鍵入Git的子模塊:將子模塊之外庫

git submodule add <repo> && git submodule init 

我的.git/config被修改,以及一個新的文件.gitmodules創建。看來,我將能夠在我的子模塊移動到特定的文件夾,以及外部存儲庫:

$ cat gitmodules 

[submodule "sub_repo"] 
path = sub_repo 
url = <...> 

但是當我嘗試我的倉庫轉移到我的父文件夾,並改變我的.gitmodules

path = ../sub_repo 

它似乎忽略「git的更新」或「git的子模塊的foreach」該模塊。

什麼是我的錯誤推理嗎?

非常感謝!

回答

2

這根本不被支持,就是這樣。子模塊的全部重點是在另一個模塊中基本上有一個存儲庫。

如果你不希望這樣做,不要使用子模塊。簡單地克隆其他存儲庫。

+1

我沒有看到可以理解的原因。我想將我目前的項目狀態引用到外部回購的狀態。我不需要它在我的倉庫中。無論如何。可能它將在未來得到支持 – 2013-02-26 10:53:31

+0

@JohnRumpel:可能不會。 git只能在其存儲庫的文件夾中寫入,所以它無法在克隆上創建該子模塊。 – 2013-02-26 11:05:53

+1

所以我必須寫我自己的叉子。 flexibleGit ;-) – 2013-02-26 11:37:21

1

移動一個子模塊出其母公司回購到一個獨立的目錄只涉及一些更新的元數據。使用Git 2.4,操作步驟如下:

  1. 從回購開始,假設子模塊中my-submodule/

    mv my-submodule ../ 
    
  2. 輔助模塊(注意,它不是刪除指針.git文件「T目錄):

    rm ../my-submodule/.git 
    
  3. 移動爲輔助模塊中的真正的Git元到子模塊的git倉庫:

    mv .git/modules/my-submodule/ ../my-submodule/.git 
    
  4. 編輯.git/config文件通過去除worktree參數,它先前指向回購內的相對路徑。

就是這樣!此時,您的父回購將顯示子模塊爲deleted,而子模塊本身將正常工作(可以使用分離的HEAD,您可以重置爲主)。

它也可以編輯.gitmodules文件中的父回購,但我發現,不這樣做不會破壞任何東西,只要你提交刪除子模塊。

如果任何人知道一個更快的方法來做到這一點(如一個實際的Git命令),我會洗耳恭聽。

+0

謝謝,這工作得很好!後來我跟着John Douthat的回答在這裏(http://stackoverflow.com/questions/1260748/how-do-i-remove-a-submodule)從原始回購中刪除子模塊。 – pedrovgp 2016-06-28 17:34:16