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
分支,它忽略了所有其他分支。我用来获取远程分支的 :
符号命令必须忽略配置文件中的获取规范。
我在服务器 ("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
分支,它忽略了所有其他分支。我用来获取远程分支的 :
符号命令必须忽略配置文件中的获取规范。