2012-07-12 175 views
2

我有一個git項目,其中包含我從公開的只讀存儲庫(即我無法推送到該存儲庫)克隆的git子模塊。是否可以提交該子模塊?我試圖做到這一點本地提交到git子模塊

[main]$ cd sub 
[sub]$ git checkout master 
[sub]$ echo test > new-file 
[sub]$ git add new-file 
[sub]$ git commit -m 'added a new file' 
[sub]$ cd .. 
[main]$ git add sub 
[main]$ git push origin 

到目前爲止好。現在的問題是,當我去到另一臺計算機,我做到以下幾點:

[main]$ git pull 
[main]$ git submodule update 

,但它失敗fatal: reference is not a tree: af232...。我認爲這會起作用,因爲當我在主要執行git push origin時,它似乎也推動子模塊的所有對象(畢竟它們位於main的.git目錄中)。但顯然,當第二臺電腦拉扯時,它不會收到這些新的對象。

回答

1

這是因爲您在超級項目中推送了子模塊更改,但尚未推送子模塊中發生的實際更改(git push origin未推送子模塊更改,僅推送其提交SHA1。)。這不是你可以做的事情,因爲它是隻讀回購。

您可以做的是將子模塊的URL更改爲您自己的存儲庫,將更改推送給它,並提交併推送超級項目中的URL更改。

+0

是的,我知道。這正是我想在這裏避免的。如果我這樣做,那麼我將無法關注「上游」存儲庫(我從中克隆子模塊的存儲庫)。 – safsaf32 2012-07-12 11:36:43

+0

如果您沒有寫入權限,則無法執行此操作。您仍然可以通過從您的克隆中提取並推送到您的鏡像倉庫來追蹤上游。 – CharlesB 2012-07-12 11:40:28