2012-05-24 149 views
1

我有一個Git子模塊,我已經成功克隆到我的主項目中。但是,當我在子模塊中進行更改並嘗試將其推回原始子模塊存儲庫時,Git拒絕執行此操作。爲什麼,我該如何解決這個問題?在Git中推子模塊更改

例子:我有兩個單獨的文件夾的子工程和項目超。我把super作爲submodule包含在super中。我在文件夾super/sub中進行更改,然後嘗試將這些更改推送到原始項目子文件夾中。 Git抱怨。

編輯:關於錯誤消息,我在Windows上使用Git Bash,很遺憾,無法從終端複製出確切的錯誤消息。這裏是最相關的行:

remote: error: refusing to update checked out branch: refs/heads/master. By default, updating the current branch in a non-bare repository is denied, because it will make the index and work tree inconsistent with what you pushed, and will require 'git reset --hard' to match the work tree to HEAD.

注意:這兩個存儲庫住在我的硬盤上。

+1

這是什麼混帳說什麼? – Stefan

+0

@Stefan,見編輯。 – astay13

回答

4

這有什麼好做的回購是一個子模塊。

你推着一個工作副本(非裸回購)的git倉庫,並試圖推送到當前簽出的同一分支 - 默認情況下,git不會讓你這樣做。

繼續你應該問自己,如果你真的想這樣做之前。這很類似,比方說,你直接克隆一個同事的回購,然後試圖推動它。如果您成功了,可能會導致您的同事在未提交更改的情況下放鬆工作,或者當更新時使用跟蹤文件覆蓋本地文件。

簡單的解決方案

最簡單的方法是在所有不推,從其他的回購只是拉來代替。最終的結果是一樣的,但是因爲你正在更新內容(這很簡單),git不會對此做任何說明。

略少,簡單的解決方案

可以推到你其他的工作副本,如果你改變了接收的回購協議的混帳配置(讀取錯誤消息的其餘部分),以允許其推入。要做到這一點,在接受回購:

git config receive.denyCurrentBranch ignore 

更多細節大約是在幫助(git config --help

receive.denyCurrentBranch 
    If set to true or "refuse", git-receive-pack will deny a ref update to the 
    currently checked out branch of a non-bare repository. Such a push is potentially 
    dangerous because it brings the HEAD out of sync with the index and working tree. 
    If set to "warn", print a warning of such a push to stderr, but allow the push to 
    proceed. If set to false or "ignore", allow such pushes with no message. Defaults 
    to "refuse". 
+0

請參閱上面的編輯錯誤消息摘要。 – astay13

+0

謝謝!這有很大的意義,我現在正在發生什麼。 – astay13