如何解决git - 使用来自裸仓库的远程分支
我想用 github 上的一个项目(不是我的)做一些时髦的事情。所以我想基本上克隆它,但我不想有一个工作树......所以这就是我所做的:我在本地创建一个裸仓库,然后我向github仓库添加了一个遥控器。我取了,我得到了 repo 包含的所有东西......我是一个快乐的人......直到我想检查可用的分支:
$ git branch -a
$
好吧……这不是我所期望的。如果我尝试检查 repo 中的任何分支(我知道在那里),我只会让 git 告诉我该引用不存在:
$ git show --summary origin/master
fatal: ambiguous argument 'origin/master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions,like this:
'git <command> [<revision>...] -- [<file>...]'
如何从我的裸存储库处理远程存储库中的分支(或实际上是任何东西)?
更新
我认为 git 应该能够处理这个问题的假设实际上是正确的。它确实对其进行了正确的管理...但是,因为它是一个大项目,所以在添加远程后运行 fetch 时 git 失败了...而且我之前没有捕捉到该错误消息。 :-O
$ git fetch upstream
remote: Enumerating objects: 60400,done.
remote: Counting objects: 100% (60400/60400),done.
remote: Compressing objects: 100% (32/32),done.
Receiving objects: 100% (4133663/4133663),1.41 GiB | 12.29 MiB/s,done.
remote: Total 4133663 (delta 60370),reused 60389 (delta 60368),pack-reused 4073263
Connection to github.com closed by remote host.
Resolving deltas: 100% (3134856/3134856),done.
所以……总而言之,显然是我的错。
解决方法
我在本地创建了一个裸仓库
描述此处使用的确切命令很重要。
通常,您会创建一个裸镜像克隆:
git clone --mirror <url> foo.git
可以创建一个裸克隆,用于接收 git push
操作:
mkdir foo.git && cd foo.git && git init --bare
你做了这两个序列中的一个,还是别的什么?
然后我在github repo中添加了一个遥控器
同样,我们需要精确的操作。我不认为 git remote add
尊重 core.bare
(在我的本地测试中没有),但这也可能与 Git 版本相关,因此 Git 版本可能会引起关注。>
我提取了...
这是我的测试结果:
$ mkdir tbare
$ git init --bare
Initialized empty Git repository in ...
$ git remote add foo ssh://git@github.com/chris3torek/scripts
$ cat config
[core]
repositoryformatversion = 0
filemode = true
bare = true
[remote "foo"]
url = ssh://git@github.com/chris3torek/scripts
fetch = +refs/heads/*:refs/remotes/foo/*
有趣的是,在不命名遥控器的情况下获取现在什么也没做。将 foo
重命名为 origin
,然后获取内容:
$ git remote rename foo origin
$ git fetch -v
remote: Enumerating objects: 35,done.
[the usual,snipped]
* [new branch] master -> origin/master
这大概是因为 git fetch
通常根据当前分支的名称及其上游设置选择远程名称。由于没有当前分支,也没有上游,这导致 git fetch
回退到硬编码的 origin
。 (而且:这个特定系统上的 Git 是 2.27.0。)
使用 git clone --mirror
创建的镜像克隆会将默认的 fetch refspec 设置为 +refs/*:refs/*
。请注意,--mirror
意味着 --bare
。
因此,您正在尝试手动完成设置克隆的步骤。似乎评论讨论将您带到了一个命令,该命令修补了迄今为止遗漏的某些内容,这很好……但为什么不直接使用直接为您提供所需内容的命令?
git clone --bare remote-url
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。