Git - 远程分支对本地仓库不可见,fetch 没有帮助

Git - remote branch invisible to local repo, fetch isn't helping

我在服务器 ("Server Repo") 上有一个个人 git 存储库。它在其中央远程仓库 ("Origin") 上看不到我从另一台计算机 ("Personal Repo") 上的个人 git 仓库推送的分支。

Server Repo(个人仓库):

$ git branch -a
* master  
remotes/origin/master

来源(中央存储库):

$ git branch -a
* master  
update

Personal Repo(个人仓库):

$ git branch -a
* update  
master  
remotes/origin/HEAD -> origin/master  
remotes/origin/master  
remotes/origin/update  

在 Server Repo 上,我尝试了 $ git fetch --all,但我得到的只是 Fetching origin,没有任何结果。

$ git fetch -v --all 产量:

Fetching origin
 = [up to date] master -> origin/master

我以前从未见过这个问题。我在寻找这个问题时遇到了很多问题,因为所有 Git Fetch 问题似乎都假设用户做错了什么。据我所知,Git 无法识别远程分支,我不知道该怎么办。

我已经从 Origin 重新克隆到一个新文件夹中,然后分支就会按预期出现。我不确定从 Origin 重新克隆一个 repo 是什么让它正常工作。我已经验证在 Server Repo 中,远程 Origin 实际上是正确的并且具有正确的路径(它是同一台机器上的绝对路径)。

git checkout --track origin/update

此答案中的语法有效:

$ git fetch origin remote_branch_name:local_branch_name

这并没有回答为什么我无法使用正常的命令来获取,但至少它解决了问题。

执行此版本的命令后,我在 Server Repo 上本地有了 Origin 更新分支,但是当我 运行 git branch -a 时,我仍然没有看到 remotes/origin/update。还是一头雾水。

更新 1:
Andrew C suggested that I look at my fetch specifications in <repo>/.git/config on Server Repo. I searched and found an example in the Git docs of what that specification is supposed to be: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

我的服务器回购配置文件之前看起来像这样:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = /home/user/repo/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master

注意带有 fetch = +refs/heads/master:refs/remotes/origin/master 的行。 link 到 git-scm.com 有一个这样的通配符示例:fetch = +refs/heads/*:refs/remotes/origin/*

所以我在获取指令中将 master 更改为 *,现在我可以像往常一样查看和获取我的分支了!

$ git branch -a
  update
* master
  remotes/origin/master

$ git fetch
From /home/user/repo/project.git
 * [new branch]      update -> origin/update

$ git branch -a
  update
* master
  remotes/origin/update
  remotes/origin/master

我不确定fetch spec为什么不正确,但我现在已经回答了为什么我看不到我的远程分支的问题,并且我已经解决了获取远程分支的问题。

如果我错了请纠正我,但我猜测是因为获取规范只指定了 master 分支,它忽略了所有其他分支。我用来获取远程分支的 : 符号命令必须忽略配置文件中的获取规范。