我从一个裸的远程存储库克隆了一个本地存储库.以下命令列出了远程存储库的分支.
$ git ls-remote <remote>
74bd3eb190edb39db04f6c0c4dbbb9e1e96bc6db refs/remotes/test
85de54d6ae813c624b9623983e6b0a4948dae0fe refs/remotes/trunk
Run Code Online (Sandbox Code Playgroud)
我想结帐并跟踪该遥控器的远程分支中继线.我怎么做?
请注意,这与签出远程存储库的本地分支不同.这就是远程存储库的样子.
$ git branch -a
master
remotes/test
remotes/trunk
Run Code Online (Sandbox Code Playgroud)
运行git fetch <remote>以获取所有远程存储库的分支后,我在本地存储库中获得此输出.
$ git branch -r
repo/HEAD -> repo/master
repo/master
Run Code Online (Sandbox Code Playgroud)
Chr*_*sen 12
您可以从任何远程获取任何引用(只要服务器愿意将其提供给您).在外部获取refs的关键refs/heads/
是提供以#开头的完整ref路径refs/
.如果需要,您甚至可以从未配置为遥控器的存储库中提取(git fetch可以使用URL而不是远程名称).
默认情况下,配置的遥控器只能从远程存储库的refs/heads/
命名空间中获取,因此它们不会在内部拾取任何内容refs/remotes/
.但是,您可以通过使用完整的引用来引用其中的引用refs/remotes/trunk
(remotes/trunk
可能也可以,但也可能是模糊的).
如果获取的refspec未指定目标ref,则它将存储在特殊的FETCH_HEAD ref中.
将存储库获取refs/remote/trunk
到FETCH_HEAD并将其作为分离的HEAD检出:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
相同,但创建一个命名的本地分支,而不是使用分离的HEAD:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout -b trunk-from-remote FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
相同,但直接进入本地分支:
git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote &&
git checkout trunk-from-remote
Run Code Online (Sandbox Code Playgroud)
如果您使用的是配置的远程工作,你可以重写它的remote.<remote-name>.fetch
配置和添加额外的条目自动从两个取refs/heads/
和refs/remotes/
.
# fetch branchs of remote into remote-name/heads/*
git config remote.remote-name.fetch '+refs/heads/*:refs/remotes/remote-name/heads/*' &&
# fetch remotes of remote into remote-name/remotes/*
git config --add remote.remote-name.fetch '+refs/remotes/*:refs/remotes/remote-name/remotes/*'
Run Code Online (Sandbox Code Playgroud)
为避免可能的冲突,上面的示例将fetch配置为将refs存储到不相交的命名空间(…/heads/
和…/remotes/
)中.如果您愿意,可以选择不同的名称.如果你确定没有冲突,你甚至可以直接填充它们refs/remotes/remote-name/
.
好问题!我知道这有效; 我想不出任何其他的东西:
git fetch origin refs/remotes/trunk
git checkout FETCH_HEAD
# or make a branch to check out
git checkout -b remote-trunk FETCH_HEAD
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这些远程引用不是那种形式,这很奇怪refs/remotes/<remote-name>/<branch-name>
...也许我误解了名字,但方法确实有效.