git - 在 git 中,如何 check out 远程仓库的远程分支?

标签 git

我有一个从裸远程存储库克隆的本地存储库。以下命令列出远程存储库的所有分支。

$ 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/

相关文章:

swift - 在 Xcode 上更改 git 帐户

c++ - Netbeans、C++ 和 Git

java - 使用 gradle 构建 JAR 并部署它的最佳实践 - 使用 Jenkins

linux - Git 如何知道要推送到哪个存储库?

python - Yosup Echoclient 错误 : "InvalidMessage or KeyId for 91XXXXXXXXXX, going to send a retry"

perl - 仅显示用户可以使用 gitweb 访问的 GIT 存储库

git - 有没有办法避免在使用 HTTPS 进行 git 推送时输入用户名?

git - 如何将现有的非空目录转换为位于另一个目录中的现有非空 git repo 的 git 分支

git - 发出 git pull 命令时出错

git - origin/, remotes/origin/Git 困惑