2014-03-18 44 views
1

我有一個奇怪的git場景:我一直在開發master,並注意到當我的CI克隆並嘗試修改git存儲庫時,它在refspec中看不到「master」。因此,命令爲什麼Git遠程/起源/主分支分離?

git checkout master 

失敗。爲了解決這個問題(因爲我需要我的CI犯一些小的更新主),我試圖做的:

git checkout remotes/origin/master 

然而,在一個分離的頭該命令的結果。最終的修復是,而不是做一結帳,我做checkout -b像這樣:

git checkout -b master 

這神奇似乎「創造」的主分支,(我認爲已經存在),然後將所有是正確的世界。

我的問題是,因此:通過git checkout -b創建的遙控器/原點/主控與主控之間有什麼區別?由於我只有一個遙控器,我認爲它們會是同義詞。

回答

4

remotes/origin/master只是一個遠程跟蹤分支,它跟蹤在遠程origin上的master分支的哪個提交。使用git checkout -b <branch>創建的分支是本地分支,而不是遠程跟蹤分支。這是不同的。

但是,克隆回購時,通常會創建本地master,因爲通常是原始回購的標準默認分支,除非原始回購設置爲使用不同分支名稱作爲默認分支。也許這就是爲什麼你能夠在本地重新創建master分支?您可以通過運行以下命令來檢查:

$ git branch -r 
    origin/HEAD -> origin/master 
    origin/master 

在此輸出中,你會看到origin/HEAD,表示遙控器上的默認分支,指向origin/master

此外,您的CI實際上是否重複克隆整個回購?這看起來效率很低。我認爲大多數CI設置只會克隆一次回購,然後拉或接收新的更改。

+0

謝謝,我把它設置爲reclone每次只是爲了幫助找出這個問題的原因,但是您在下一次迭代中的權利,我們希望拉動變化而不是每次克隆一個新的回購。 – jayunit100