为什么"git remote show origin"会将远程分支列为"tracked",即使这些分支没有链接到本地分支进行pull/push?在这种情况下,"tracked"是否意味着其他意思?我认为这就是"tracked"的全部含义:git-docs关于分支跟踪。
1) 克隆具有多个远程分支的回购
2) run git remote show origin
--表示跟踪"testBranch"。但git branch -vv
正确地只显示了主跟踪源/主,而git branch -a
正确地显示了只有一个本地分支,即主。
3) 那么:git remote show origin
将testBranch列为"已跟踪"是什么意思?需要明确的是:设置方式没有什么"错":一切都很好。我只是不明白为什么远程testBranch被标记为"tracked"。这就是我想要的答案。
hawk@Tug:~/temp/TestRepo (master)$ git remote show origin
* remote origin
Fetch URL: git@github.com:haughki/TestRepo.git
Push URL: git@github.com: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)
hawk@Tug:~/temp/TestRepo (master)$ git branch -vv
* master 8df130e [origin/master] shoulda done this last time
hawk@Tug:~/temp/TestRepo (master)$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/testBranch
git remote show
提到的"tracked"与git branch -vv
所说的"tracking"不同,后者发生在git checkout -b <branch> <upstream>
中。(或者,"不同"这个词可能太强了,因为基本思想是一样的,它指的是存储库中的远程跟踪分支,而不是你是否有一个本地分支碰巧有一个作为其上游的分支。)
特别是,git remote show
检查给定远程的fetch =
行,并将其与远程上现在实际可用的引用进行比较(运行git ls-remote
查看这些引用)。
名为origin
的远程设备的默认fetch =
行为:
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
将停止提及它。