Answers:
使用我从Github.com的上游Git存储库中检出的Puppet副本的示例...
$ git remote show origin
* remote origin
Fetch URL: git://github.com/reductivelabs/puppet.git
Push URL: git://github.com/reductivelabs/puppet.git
HEAD branch: master
Remote branches:
0.24.x tracked
0.25.x tracked
2.6.x tracked
master tracked
next tracked
primordial-ooze tracked
reins-on-a-horse tracked
testing tracked
testing-17-march tracked
testing-18-march tracked
testing-2-april tracked
testing-2-april-midday tracked
testing-20-march tracked
testing-21-march tracked
testing-24-march tracked
testing-26-march tracked
testing-29-march tracked
testing-31-march tracked
testing-5-april tracked
testing-9-april tracked
testing4268 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)
然后,如果我要执行以下操作:
$ git checkout -b local_2.6 -t origin/2.6.x
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'
最后再次重新运行git remote show origin
命令,然后我将在底部附近看到以下内容:
Local branches configured for 'git pull':
local_2.6 merges with remote 2.6.x
master merges with remote master
git fetch
或git pull
,则将在克隆的存储库中跟踪对远程分支的更新。本地分支就是远程分支的本地分支,因此在给出适当的命令时,将跟踪并合并对远程分支的更新。在创建本地分支时,我明确包含了“ -t”选项,以确保它跟踪其起源的分支。请记住,本地分支也可以跟踪另一个本地分支,因此不必是远程分支。
对于所有分支机构:
git branch -avv
仅对于本地分支机构:
git branch -lvv
仅对于远程分支:
git branch -rvv
显示所有分支以及上游分支的名称。
git branch -lvv
显示仅上游的本地分支可能有用
git branch -vv
为我工作...
Jeremy Bouse说明了如何git remote show
显示跟踪信息。如果您只想要供人类使用的信息,那应该就足够了。
如果计划在自动上下文中使用信息(例如脚本),则应改用较低级别的信息(“管道”)git for-each-ref
。
% git remote show origin
* remote origin
⋮
Local branches configured for 'git pull':
master merges with remote master
pu merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu
该git for-each-ref
学会的%(upstream)
令牌的Git 1.6.3。使用早期版本的Git,您将必须使用git config branch.<name>.remote
和git config branch.<name>.merge
(可能使用git for-each-ref
来为每个本地分支名称构建命令)提取跟踪信息。
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
对于特定的分支,可以使用git rev-parse
与@{u}
或@{upstream}
在树枝上的名称,如后缀:
$ git rev-parse --symbolic-full-name master@{u}
refs/remotes/github-mhl/master
...或对于缩写形式,添加 --abbrev-ref
$ git rev-parse --symbolic-full-name --abbrev-ref master@{u}
github-mhl/master
您通常可以branch@{upstream}
在需要提交的地方使用语法。
git rev-parse --symbolic-full-name HEAD
vs. git rev-parse --symbolic-full-name HEAD@{u}
,谢谢!
我使用以下shell脚本(名为git-tracks
)来显示当前分支所跟踪的远程分支:
#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}
echo "${remote:?}/${remoteBranch:?}"
这也可以使用提到的git for-each-ref
,但是我发现直接访问比过滤当前分支的输出要简单一些。
set -e
,但是通常坚持显式检查。但是在这种情况下,它确实更好。
git version 1.9.4
。回声报什么:(
.git/config
文件还将提供以下跟踪分支信息:
[remote "Hub"]
url = ssh://xxxx/tmp/Hub
fetch = +refs/heads/*:refs/remotes/Hub/*
[branch "develop"]
remote = Hub
merge = refs/heads/develop
[branch "Dev1"]
remote = Test
merge = refs/heads/Dev1
[remote "Test"]
url = ssh://xxxx/tmp/gittesting/Dev1GIT
fetch = +refs/heads/*:refs/remotes/Test/*