2015-02-07 124 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

相关问题