“git remote show origin”:为什么即使有些不是,所有分支都显示“已跟踪”?
为什么“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
的“跟踪”是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
会停止提及它。
谢谢,这就是我所想的:按照'git remote show
是的 - 在很大程度上,这就是git试图首先通过“追踪”或“远程追踪”分支所表达的意思,除了各种人员和/或文档的某些部分将它与“将某些分支(远程或本地)标记为某个其他本地分支的“上游”(即“@ {u}”)。 – torek 2015-02-07 07:17:48
'git branch -r'告诉你什么? – gravetii 2015-02-07 04:47:40
@gravetii与'git branch -a'(见上面的输出)相同,只有本地跟踪主分支。没有本地测试分支。 – 2015-02-07 05:28:41