我有一个从裸远程存储库克隆的本地存储库。以下命令列出远程存储库的所有分支。
$ git ls-remote <remote>
74bd3eb190edb39db04f6c0c4dbbb9e1e96bc6db refs/remotes/test
85de54d6ae813c624b9623983e6b0a4948dae0fe refs/remotes/trunk
我想检查并跟踪那个远程的远程分支 trunk。我该怎么做?
请注意,这与 checkout 远程存储库的本地分支不同。 这就是远程存储库的样子。
$ git branch -a
master
remotes/test
remotes/trunk
在运行 git fetch
$ git branch -r
repo/HEAD -> repo/master
repo/master
最佳答案
您可以从任何远程获取任何引用(只要服务器愿意将其提供给您)。在外部获取 refs 的关键 refs/heads/
是提供以 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
相同,但创建一个命名的本地分支而不是使用分离的 HEAD:
git fetch remote-name-or-url refs/remotes/trunk &&
git checkout -b trunk-from-remote FETCH_HEAD
相同,但直接进入本地分支:
git fetch remote-name-or-url refs/remotes/trunk:trunk-from-remote &&
git checkout trunk-from-remote
如果您正在使用配置好的 Remote ,您可以重写它的 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/*'
为避免可能发生的冲突,上述示例将 fetch 配置为将 refs 存储到不相交的命名空间(…/heads/
和 …/remotes/
)中。如果你愿意,你可以选择不同的名字。如果你确定不会有冲突,你甚至可以把它们都直接塞到refs/remotes/remote-name/
下。 .
关于git - 在 git 中,如何 check out 远程仓库的远程分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3036817/