"git remote show origin":为什么所有分支都显示 "tracked" 而有些分支却没有?
"git remote show origin": why all branches show "tracked" even when some aren't?
为什么 "git remote show origin" 将远程分支列为 "tracked",即使这些分支没有链接到 pull/push 的本地分支? "tracked" 在这种情况下是否还有其他含义?我认为这就是 "tracked" 的全部含义:git docs on branch tracking.
1) 克隆一个有多个远程分支的仓库
2) 运行 git remote show origin
-- 表示 "testBranch" 被跟踪。但是 git branch -vv
正确显示只有主跟踪 origin/master,并且 git branch -a
正确显示只有一个本地分支,master。
3) 那么:git remote show origin
将 testBranch 列为 "tracked" 是什么意思?需要明确的是:设置方式与 "wrong" 无关:一切正常。我只是不明白为什么远程 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>
同时出现。 (或者 "different" 这个词可能太强了,因为基本思想是相同的,它谈论的是你的存储库中的远程跟踪分支,而不是你是否有一个本地分支恰好有其中一个它的上游。)
特别是,git remote show
检查给定遥控器的 fetch =
行,并将其与遥控器上现在实际可用的参考资料进行比较(运行 git ls-remote
看看那些)。
名为 origin
的远程的默认 fetch =
行显示为:
fetch = +refs/heads/*:refs/remotes/origin/*
注意两个 *
。左边的匹配遥控器上存在的所有分支,而右边的表示 "replace with the same name matched on the left".
假设远程 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 origin" 将远程分支列为 "tracked",即使这些分支没有链接到 pull/push 的本地分支? "tracked" 在这种情况下是否还有其他含义?我认为这就是 "tracked" 的全部含义:git docs on branch tracking.
1) 克隆一个有多个远程分支的仓库
2) 运行 git remote show origin
-- 表示 "testBranch" 被跟踪。但是 git branch -vv
正确显示只有主跟踪 origin/master,并且 git branch -a
正确显示只有一个本地分支,master。
3) 那么:git remote show origin
将 testBranch 列为 "tracked" 是什么意思?需要明确的是:设置方式与 "wrong" 无关:一切正常。我只是不明白为什么远程 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>
同时出现。 (或者 "different" 这个词可能太强了,因为基本思想是相同的,它谈论的是你的存储库中的远程跟踪分支,而不是你是否有一个本地分支恰好有其中一个它的上游。)
特别是,git remote show
检查给定遥控器的 fetch =
行,并将其与遥控器上现在实际可用的参考资料进行比较(运行 git ls-remote
看看那些)。
名为 origin
的远程的默认 fetch =
行显示为:
fetch = +refs/heads/*:refs/remotes/origin/*
注意两个 *
。左边的匹配遥控器上存在的所有分支,而右边的表示 "replace with the same name matched on the left".
假设远程 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
就不提了