"git remote show origin" : 为什么所有分支都显示"tracked",即使有些分支没有?



为什么"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将停止提及它。

相关内容

  • 没有找到相关文章

最新更新