2010-01-27 227 views
19

當我嘗試'git push origin master'到我的外部磁盤上的遠程存儲庫時,出現了git警告,指出在缺省情況下git將在下一版本的git中拒絕結帳庫。在外部磁盤上,我已經檢查了項目,並且希望將我在計算機上執行的更改發送給這些重新發布。 'git push origin master'是不是正確的方法?我是否需要在外部磁盤上儲存倉庫上的「git pull ...」?所以我不能推動變化,只是拉動它們?只使用「裸」存儲庫是不同的?因此,如果我的外部磁盤上的存儲庫是裸倉庫,我可以對其進行更改?我是否理解正確?Git只推送裸露的存儲庫?

回答

6

您不應該推送到非裸倉庫,因爲推送只會更新倉庫的內部狀態,並且不會影響已簽出的文件的磁盤上副本。因此,如果您沒有首先更新(通過git checkout)回購庫中的文件狀態的磁盤上副本,就可以在回購中開始工作時遇到問題。

+0

那麼,推回購併不完全是從回購拉? – 2010-01-27 18:54:08

+3

成爲導師:正確;推動實際上是取回的對立面。 Pull =獲取併入當前分支。 – ebneter 2010-01-27 19:14:23

+2

關鍵是拉也更新工作樹中的文件(「磁盤上」文件),既不推送也不提取。 – mipadi 2010-01-27 19:34:41

23

仔細閱讀警告。新的默認禁止僅限於推送到非裸倉庫中的當前簽出分支。推送到非裸存儲庫中的任何其他分支完全可以。

原因是推送過程沒有直接訪問工作樹,因此索引和分支頭在工作樹下發生更改。當你隨後進入工作樹時,看起來工作樹已經取消了與真正在開發中的任何改變混合在一起的變化。這使得分離兩組變更非常困難。

推動其他分行沒有這樣的缺點。如果需要,您可以轉到該存儲庫並將這些更改合併到檢出的分支中。

+3

直到我閱讀[git ready»推送到裸露的存儲庫]時,我才明白這個答案(http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html)和[所有關於「光禿禿的」回購 - 什麼,爲什麼,以及如何解決一個非裸露的推動](http://sitaramc.github.com/concepts/bare.html)(特別是「是啊是的,但爲什麼我需要一個裸露的回購?「部分)。然而,我現在呢! – 2011-05-03 15:26:23

+0

我們有能力推入未檢出分支,然後使用post-receive hook合併原始barnch並更新分支嗎? – 2013-04-02 13:25:18