2010-12-23 90 views
1

我有一個GIT存儲庫和幾個SUBMODULES。GIT子模塊更新*刪除未被取消的文件

的問題是每一個有人更新子模塊的時候,我試圖通過調用來更新我的文件:

$ git submodule update 

但發生的事情是它刪除我所有未提交的文件,這是很煩人的。
我試圖提交和第一推的文件,但它不會讓我來推:

error: failed to push some refs to 'ssh://dev.ancreative.co.uk/var/git/library/Blocks.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'non-fast-forward' 
section of 'git push --help' for details.* 

所以我嘗試調用git submodule update,但隨後這種缺失情況。

任何人都知道什麼會導致這個問題?非常感謝。

回答

1

git submodule update不會幫你解決「非快進」的情況。
它只會簽出父回購參考文獻。
它不會拉任何東西。

此外,如在git book提到:

git submodule update檢查發現的特定提交,而不是分支的尖端。
這就像簽出一個標籤:頭是分離的,所以你不在分支上工作。

$ git branch 
* (no branch) 
master 

如果你想使一個子模塊內的變化,你有一個分離的頭,那麼你應該創建或者簽出一個分支,進行更改,發佈子模塊內的變化,然後更新上層項目,以引用新的提交:

$ git checkout master 

,以便在更新刪除你的文件的事實(即使犯第一)可能與這樣的事實:你是在一個分離的分支。 (注:你仍然可以拿回你在分離的分支上提交了「git submodule update」之後刪除由looking at the reflog一切)

一旦你在適當的分支子模塊中,您可以:

  • 試到push
  • 如果因爲非快速前進的情況而失敗,你可以先git pull與最新的遠程提交合並。
  • 然後push
  • 最後,回到父回購和commit那裏,註冊您的子模塊的新SHA1。