2013-03-13 130 views
50

當我推一個新的分支最多通過Git的擴展遠程倉庫,我得到一個警告,指出什麼是跟蹤參考?

The branch {branch name} does not have a tracking reference. Do 
you want to add a tracking reference for {branch name}? 

什麼是跟蹤參考?我只發現了幾個跟蹤谷歌引用的提及,並沒有真正的定義。

+2

請參閱push -u for the scoop。 – bmargulies 2013-03-13 01:04:51

+0

如果我理解用於push,pull和config的git手冊頁,跟蹤引用是一個設置或設置,添加到配置文件中,由無參數的git-pull用來告訴它要下拉什麼。我發現文檔有點混亂,但我認爲它是跟蹤參考是在配置文件中的以下設置的組合:遠程。 .fetch和分支。 .merge。那是對的嗎? – 2013-03-13 01:32:41

回答

21

其基本思想是純粹是本地引用(例如分支,標籤),然後是遠程跟蹤引用,它跟隨其他回購站中發生的情況。因爲Git是分散的,所以你可以選擇一個分支的名字,這個名字和遠程的名字一樣,但不知道另一個名字,這樣他們就完全不同了。 Git允許你這樣做,但它也提供了一種將本地引用鏈接到遠程引用的方法。

例如,請考慮以下幾點:

% git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/maint 
    remotes/origin/master 
    remotes/origin/next 
    remotes/origin/pu 
    remotes/origin/todo 

在這裏,我們有origin稱爲nexttodo分支機構。

% git checkout -t remotes/origin/next 
Branch next set up to track remote branch next from origin. 
Switched to a new branch 'next' 
% git branch todo  

現在我們有一個本地分支next將跟蹤不會改變remotes/origin/todo更新相同的名稱和當地分支機構todo的遠程分支。

+0

謝謝。因此,「引用」僅僅是一個對象,就像一個分支或標籤,而「跟蹤引用」只是一個鏈接到遠程存儲庫中相應對象的對象? – 2013-03-13 04:23:39

+2

是的 - 這是主要想法。 「對象」在Git中有特殊的含義;它意味着任何存儲在.git/objects之下的SHA1,因此它比「reference」更普遍,但這是主意。 – 2013-03-13 04:29:29

+15

Sooo,呃,有人想推薦我們應該說YES還是NO? 「你想添加一個跟蹤引用到主」?實際情況仍然令人困惑。通常選擇什麼?兩種方案都有什麼優點和缺點?如果沒有造成任何問題,可以說'是'並且忘記它嗎? – 2013-07-15 19:32:56

5

尼克Quaranto的優秀博客git的準備有一個文章,解釋remote tracking branches

遠程跟蹤分支有幾個不同的用途:

  • 他們用來連接你」重新在本地工作,與遠程的 相比。

  • 當您使用git pull或git fetch時,他們會自動知道從 獲得更改的遠程分支。

  • 更好的是,git狀態會識別出您在分支的遠程版本的前面 前多少次提交。

5

機Git分支可以跟蹤遠程分支,這意味着混帳推和git pull命令就會知道推拉承諾和跟蹤的分支默認。此外,git status會告訴您當前本地分支和它正在跟蹤的遠程分支之間的狀態。當你克隆一個git倉庫時,git會爲本地主分支添加一個跟蹤引用來跟蹤遠程主分支。當你從一個新的遠程分支結賬時,git會爲創建的本地分支添加一個跟蹤參考,以跟蹤你簽出的遠程分支。但是,如果您在本地創建新分支,然後將其推送到遠程存儲庫,則必須明確告訴git是否希望本地分支開始跟蹤新的遠程分支。使用-u--set-upstream選項時,可以將本地分支推送到遠程存儲庫:git push -u origin my-new-branch

您可以使用命令git branch -vv來檢查您的本地分支機構正在跟蹤哪些遠程分支(如果有)。下面是輸出的一個小例子。

b1  560eb64 Added file.txt 
    b2  560eb64 [origin/b2] Added file.txt 
    b3  b638c18 [origin/r1: ahead 1] Added file3.txt 
* master 560eb64 [origin/master] Added file.txt 

在這種情況下,我們有地方分支機構masterb1b2b3master分支正在跟蹤名爲master的遠程分支,b1分支未跟蹤任何遠程分支,b2分支正在跟蹤名爲b2的遠程分支,而b3分支正在跟蹤名爲r1的遠程分支。 git branch -vv也顯示與被跟蹤分支相關的分支的狀態。在這裏,分支b3在追蹤的遠程分支之前是1,並且其他分支與它們各自的遠程追蹤分支達到最新。

因此,如果您創建本地分支並推送到遠程存儲庫,是否要添加對分支的跟蹤引用?通常,當您將新的本地分支推送到遠程存儲庫時,您需要與其他開發人員協作以實現功能。如果您將跟蹤引用添加到本地分支,則可以方便地將其他人對分支所做的更改提取出來,所以我認爲在大多數情況下您希望添加跟蹤引用。

1

是的,你可能想要添加它。在控制檯中執行此操作:git branch --set-upstream-to origin/master