2015-02-07 41 views
2

爲什麼「git remote show origin」將遠程分支列爲「已跟蹤」,即使這些分支未鏈接到本地​​分支以進行推/拉操作?在這種情況下,「跟蹤」是否意味着其他事情?我認爲這就是「追蹤」的全部含義:git docs on branch tracking「git remote show origin」:爲什麼即使有些不是,所有分支都顯示「已跟蹤」?

1)克隆回購與多於一個的遠程分支

2)運行git remote show origin - 說 「testBranch」 被跟蹤。但git branch -vv只能正確顯示主跟蹤原點/主控,而git branch -a正確顯示只有一個本地分支主控。

3)那麼:git remote show origin在將testBranch列爲「已跟蹤」時意味着什麼?要清楚:事情的設置沒有什麼「錯誤」:一切正常。我只是不明白爲什麼遠程testBranch被標記爲「跟蹤」。這就是我想要的答案。

[email protected]:~/temp/TestRepo (master)$ git remote show origin 
* remote origin 
    Fetch URL: [email protected]:haughki/TestRepo.git 
    Push URL: [email protected]:haughki/TestRepo.git 
    HEAD branch: master 
    Remote branches: 
    master  tracked 
    testBranch tracked 
    Local branch configured for 'git pull': 
    master merges with remote master 
    Local ref configured for 'git push': 
    master pushes to master (up to date) 
[email protected]:~/temp/TestRepo (master)$ git branch -vv 
* master 8df130e [origin/master] shoulda done this last time 
[email protected]:~/temp/TestRepo (master)$ git branch -a 
* master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/master 
    remotes/origin/testBranch 
+0

'git branch -r'告訴你什麼? – gravetii 2015-02-07 04:47:40

+0

@gravetii與'git branch -a'(見上面的輸出)相同,只有本地跟蹤主分支。沒有本地測試分支。 – 2015-02-07 05:28:41

回答

2

的「跟蹤」是git remote show提到是從「跟蹤」關於git branch -vv會談,與git checkout -b <branch> <upstream>出現不同。 (或者,「不同」這個詞太強大了,因爲底層的想法是一樣的,它是在談論倉庫中的遠程跟蹤分支,而不是你是否有一個本地分支恰好具有其中的一個分支。)

尤其git remote show檢查給遠程的fetch =線(S),並與現在在遠程(運行git ls-remote看到的那些),實際可用的參考比較這一點。

默認fetch =線遠程命名origin寫着:

fetch = +refs/heads/*:refs/remotes/origin/* 

注意兩個*秒。左邊的一個與遠程存在的所有分支相匹配,而右邊的分支則表示「替換爲左邊相同的名稱」。

假設遠程origin目前有以下裁判:

refs/heads/master 
refs/heads/newbr 
refs/tags/v1.2 
refs/notes/commits 

進一步假設分支newbr是新的,因爲你最後一次克隆,獲取或以其他方式跟遠程origin,使git branch -r將只列出origin/master,而不是origin/newbr

如果你現在運行git remote show origin你會得到(連同其他東西)此位:

master tracked 
    newbr new (next fetch will store in remotes/origin) 

這意味着,兩個分支匹配,並且你已經有了refs/remotes/origin/master,但你還沒有refs/remotes/origin/newbr

一旦您運行git fetch,您將獲得origin/newbr。但是如果在你運行git fetch之前,你改變了你的fetch =這一行,這樣就不會獲得origin/newbr,git remote show origin會停止提及它。

+0

謝謝,這就是我所想的:按照'git remote show '的說法,「跟蹤」僅僅意味着已經爲給定的遠程分支獲取遠程跟蹤分支,而不是分支鏈接到任何本地分支爲「推/拉」,對吧? – 2015-02-07 06:16:50

+0

是的 - 在很大程度上,這就是git試圖首先通過「追蹤」或「遠程追蹤」分支所表達的意思,除了各種人員和/或文檔的某些部分將它與「將某些分支(遠程或本地)標記爲某個其他本地分支的「上游」(即「@ {u}」)。 – torek 2015-02-07 07:17:48

相關問題