2017-01-27 73 views
2

我現在正在研究一個項目,它有一個來自GitHub的子模塊。git如何將代碼推送到github中的子模塊

我直接通過git clone獲得代碼,我在子模塊中改變了一些東西,並嘗試將它們推送到GitHub服務器中。
但是通過這樣做,GitHub中的子模塊變空了。

我搜索互聯網,似乎我應該先推子模塊,但是,當我進入子模塊並執行git status時,我意識到Git無法識別我在子模塊中並且所有狀態仍然在大項目上。

所以我想知道的是:如何將子模塊推送到GitHub並解決這個問題?
我的GitHub帳戶應該擁有修改大項目和子模塊的權限。

回答

1

如果可以,再次克隆您的GitHub倉庫,將其重置爲最後一個問題推送前的狀態(可能git reset --hard @~1已足夠,請與git log覈對),然後嘗試再次應用您的修改。

這次,首先從submodule文件夾中添加並提交併推送。
然後轉到父回購(您已克隆的GitHub回購),添加,提交和推送。

+0

謝謝你,我試過了,但是當我進入子模塊的文件夾,我不能把他們因爲Git並不自動換入的git子模,所以我不能推動或單獨提交子模塊。我用git克隆克隆整個項目,它是自動克隆子模塊存儲庫還是隻克隆文件? –

+0

@RushengZhang最近有足夠的git,git克隆也會檢查子模塊。 – VonC

+0

@RushengZhang但復位後,你需要做一個'git submodule update --init' – VonC

1

首先檢查是否有任何回購的子模塊可在.gitmodules文件夾 它應該顯示:

[submodule "sub repo name"] 
    path = xx-name 
    url = https://github.com/yoursubmodule path 

如果存在,那麼你的子模塊使用Git的命令應該工作

更新:

克隆項目與子模塊

克隆這樣一個項目時,默認情況下,您將獲得包含子模塊的目錄,但其中沒有任何文件。

你必須運行兩個命令:git submodule init初始化你的本地配置文件,並git submodule update從該項目獲取的所有數據,並檢查了適當的在你的子項目會提交上市:

或者

有然而,另一種做法稍微簡單一點。如果您將- 遞歸傳遞給git clone命令,它將自動初始化並更新存儲庫中的每個子模塊。

$ git clone --recursive <url> 
+0

謝謝,這是命令行正是我錯過的。 –

+0

@RushengZhang Yeah很高興爲您提供幫助。歡迎! –