2010-09-13 65 views
0

我一直在合理成功地使用Git(也許這是一個樂觀的評估),現在已經進行了兩年,但無可否認,它一直在盲目地進行。無論出於何種原因,我已經開始對內部組件更加好奇,並且一直在深入挖掘遠程跟蹤分支。它們在整體上是有意義的,但我留下了這個問題:什麼是「克隆版本庫的當前活動分支」

當我克隆存儲庫並創建了所有遠程跟蹤分支時,「克隆存儲庫的當前活動分支」是什麼(引用自git-clone文檔)?

如果我從同事的倉庫克隆,我想這將是跟蹤分支取其分理處有在git branch結果它前面的*,但是如果我從GitHub克隆什麼?它只是我在界面中選擇的分支?初步測試表明情況並非如此。

謝謝。

+0

http://stackoverflow.com/questions/1485578/how-do-i-change-a-git-remote-head-to-point-to-something-besides-master有一些答案。 – VonC 2010-09-13 13:06:41

回答

0

Git存儲庫當前活動的分支是HEAD指向的分支。

在內部,HEAD只是一個文件,位於存儲庫的GIT_DIR(非裸倉庫的.git目錄或裸存儲庫的頂部)的頂部。如果HEAD看起來像ref: refs/some/thing,則它將被解釋爲指向名爲ref的symref(符號引用)(通常是refs/heads/下的一個分支)。如果HEAD包含對象名稱(SHA-1)的40字節ASCII十六進制表示,那麼我們說它是一個「分離的HEAD」(因爲它不是「附加」到一個正常的分支),它的工作原理與正常的ref (即它像任何其他分支一樣工作)。

如你所想,git branch將顯示當前在其之前帶有星號的活動分支。這在常規(非裸)和裸存儲庫中工作。

在常規(非裸)庫(那些具有工作樹)HEAD由git的結帳的正常使用自動維護:

git checkout other-branch 
# HEAD is now a symref to refs/heads/other-branch 

裸存儲庫(通常用在服務器上)沒有工作樹,所以git結賬將無法​​正常工作。要更新一個純倉庫的頭,你必須使用git symbolic-ref

git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch 
# HEAD is now a symref to refs/heads/other-branch 

在你必須有到存儲庫中直接獲得更新HEAD改變當前活躍的分支兩種情況。像大多數託管服務提供商一樣,GitHub不提供對存儲庫的直接訪問。但是,它確實提供web interface that lets users change the HEAD of their repositories(他們將其稱爲「默認分支」)。

相關問題