我有一个裸存储库,它origin在远程机器上。
我想将其分支下载到本地裸仓库中。即我想git branch -vva在分支列表中使用命令查看它们,如下所示:
* master 0bc84f0 [origin/master] something...
remotes/origin/HEAD -> origin/master
remotes/origin/master 0bc84f0 something...
Run Code Online (Sandbox Code Playgroud)
在非裸git pull --all存储库的情况下,分支也同步(它使远程分支在本地存储库中可见),但在裸存储库的情况下,拉取是不可能的。
在这种情况下如何同步远程分支?
注意:git --fetch不起作用,远程分支在它之后仍然不可见:
$ git remote -v
origin git://host/project.git (fetch)
origin git://host/project.git (push)
$ git branch -vva
* master 4085a31 ...something
$ git fetch
From git://host/project.git
* branch HEAD -> FETCH_HEAD
$ git branch -vva
* master 4085a31 ...something
Run Code Online (Sandbox Code Playgroud)
附加信息:我config的如下:
[core]
repositoryformatversion = 0
filemode = false
bare = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git://host/project.git
Run Code Online (Sandbox Code Playgroud)
我config在一个新克隆的(也是裸的)repo 中:
[core]
repositoryformatversion = 0
filemode = true
bare = true
[remote "origin"]
url = git://host/project.git
Run Code Online (Sandbox Code Playgroud)
解决方案#1:
您需要将您的仓库转换为镜像仓库:
git remote add --mirror=fetch origin <url>
git fetch
Run Code Online (Sandbox Code Playgroud)
镜像仓库将在获取后保持与原始引用同步的本地引用。它有一个缺点,即镜像应该是远程仓库的精确副本,这可能不是您的目标。
解决方案#2:
(使用评论从@peterh 扩展):
在 git config 中(只是repo/config在裸仓库的情况下),一个
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
应该存在。如果没有,它可能是一个重要的 git 功能,或者一个 git 错误。您可以手动修复它。之后,git fetch将工作。
Agit fetch应该就够了。
仅用于测试,只需尝试再次将您的裸存储库克隆到新的本地存储库中。然后查看远程跟踪分支是否存在。
git clone git://host/project.git newproject
cd newproject
git branch -avv
Run Code Online (Sandbox Code Playgroud)
我做了一个新的克隆,尽管原点指向正确的 url,但我仍然看不到任何远程分支。
情况仍然是一样的,正如你在我的问题末尾看到的那样(正确的原始 URL,但仍然没有远程分支)
这意味着这些远程分支一开始就不在远程存储库中。克隆的默认获取引用规范
是
fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
如果远程存储库有任何其他分支,它们也会被克隆。
如果配置未显示任何fetch键(如 所示git config -l),请尝试添加一个:
git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)
检查一下:
git config --get remote.origin.fetch
Run Code Online (Sandbox Code Playgroud)
更多信息请参阅“git fetch不获取所有分支”。
那么真正的问题就变成了:OP 的配置中的什么使git clone克隆仅成为 master 并且不包含 fetch refspec?
也许设置了 Git 环境变量?
例如,GIT_TEMPLATE_DIR(其中包括默认配置)
简单地添加 fetch refspec 并不能解决实际问题。
为了解决实际问题,需要更多信息(Git 版本、操作系统版本……)
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |