git - 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 应该能够处理这个问题的假设实际上是正确的。它确实正确地管理它......但是,因为它是一个大项目,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
.
推荐阅读
- google-apps-script - 使用谷歌应用脚本在谷歌表单中禁用“回复回执”?
- python - 删除虚拟环境后安装的软件包会怎样?
- javascript - 生成具有数字子集范围的数组的数组函数
- kubernetes - 使用多主Kubernetes集群架构的可行性
- angular - `[innerHTML]` - 缺少 html 标签
- node.js - 为什么我在使用 selenium chromedriver 时出现此错误?
- objective-c - Git 无法识别新的 .h、.m 和 .xib 文件
- mysql - 使用 HAproxy 拆分 mysql 集群的读/写
- visual-studio-2017 - Visual Studio 2017 正在新窗口而不是新选项卡中调试,如果我关闭该窗口,则停止调试
- python - Python 3.X:为什么 numexpr.evaluate() 比 eval() 慢?