在本地Git倉庫此文件夾包含頭文件只是克隆後:什麼時候在Git中創建本地遠程跟蹤分支?
.git\refs\remotes\origin\
當我創建一個遠程跟蹤分支的本地分支,分支將在創建:
.git\refs\heads
.git\refs\remotes\origin\
:
當我推在當地分支修改到遠程存儲庫中創建分支的新副本那麼當它們最初被推送到遠程存儲庫時,首先在上述文件夾中創建遠程跟蹤分支?
在本地Git倉庫此文件夾包含頭文件只是克隆後:什麼時候在Git中創建本地遠程跟蹤分支?
.git\refs\remotes\origin\
當我創建一個遠程跟蹤分支的本地分支,分支將在創建:
.git\refs\heads
.git\refs\remotes\origin\
:
當我推在當地分支修改到遠程存儲庫中創建分支的新副本那麼當它們最初被推送到遠程存儲庫時,首先在上述文件夾中創建遠程跟蹤分支?
你不應該關心其中分支機構存儲(如你應該使用「通告」的接口,git branch
,git for-each-ref
,等等)。 時問題雖然更有趣。
遠程追蹤分支只是refs/remotes
名稱空間中的參考。通常情況下,還會增加一個級別,特別是遠程本身的名稱,因此對於名爲origin
的遠程,分支將全部落入refs/remotes/origin
。
git clone
命令會在您本地的git配置文件(針對該存儲庫)中創建一個remote
配置條目。此配置條目,假設你告訴git clone
使用默認origin
名稱的部分內容:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
這就是名字空間來自:在remote.origin
配置條目的fetch
線(S),即從東西:
$ git config --get-all remote.origin.fetch
實際的遠程跟蹤分支創作發生在幾個地方。
最明顯的是當fetch
(或初始clone
步驟,其中包括fetch
的輕微變化)或git remote update
運行。這些命令詢問遠程有關它的參考。那些匹配一條或多條fetch
線路的線路將被複制,已修改基於每個參考線路的右側。
這意味着,在git clone
,git fetch origin
,或git remote origin update
,如果遠程擁有refs/heads/foo
(分支foo
),你自己的本地存儲庫獲取對應的refs/remotes/origin/foo
。如果您之前沒有,則會創建一個(本地)遠程跟蹤分支。
(如果您運行git fetch
這樣你阻止它取分支foo
,雖然,跟蹤分支不不獲得創建。例如,如果你運行git fetch origin refs/heads/bar:refs/temp_bar
,這個取帶來了只有refs/heads/bar
。不同版本的Git將會或不會在此時創建或更新refs/remotes/origin/bar
:1.8.4版本不會,但更新的版本將會採用正常的fetch
配置。)
在git push
期間發生不太明顯的情況。在這種情況下,當您的本地git成功提供對遠程名稱空間的引用時,本地git還將使用與git fetch
相同的refspec映射創建或更新遠程跟蹤分支。 因此,使用默認設置,推refs/heads/new
使得它上創建遠程origin
分支foo
也創建(本地)遠程跟蹤分支refs/remotes/origin/new
。(我把這個大膽的,因爲我認爲它的答案,我認爲你問這個問題。)
如果添加--prune
到git fetch
或git remote update
命令時,它也將刪除遠程 - 如果他們現在在遙控器上失蹤 - 他們可以告訴他們,因爲他們從遙控器獲得所有引用。 (請記住,這是從git push
的--prune
選項,這意味着在遙控器上刪除分支非常不同的,一拉git push --delete
或git push :dst
。)
*那麼,遠程跟蹤分支在上面的文件夾時,第一次創建他們最初被推送到遠程存儲庫?*請澄清你的問題。 – Jubobs 2015-02-17 23:21:15