![如何获取未在git中签出的远程存储库的远程存储库](https://linux22.com/image/185138/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E6%9C%AA%E5%9C%A8git%E4%B8%AD%E7%AD%BE%E5%87%BA%E7%9A%84%E8%BF%9C%E7%A8%8B%E5%AD%98%E5%82%A8%E5%BA%93%E7%9A%84%E8%BF%9C%E7%A8%8B%E5%AD%98%E5%82%A8%E5%BA%93.png)
有没有办法使用 来获取未签出的远程存储库的远程存储库git
?
我的远程 PC 上的点文件处于版本控制之下(使用yadm
)。该存储库已克隆到我的本地 PC 上(也使用yadm
)。但在我的本地 PC 上,我使用不同的点文件管理实用程序(rcm
)这允许更大的灵活性。
由于yadm
和rcm
在不同的基础上工作(symlinks to ~
与bare git into ~
),我必须跳过障碍来尝试yadm
在我的本地电脑上使用的东西:
- 取消链接我当前的符号链接点文件
rcm
- 签出
yadm
- 存储库
要撤消该操作,我必须
yadm
删除签出存储库时克隆的所有文件- 符号链接文件
rcm
这很烦人。因此,我将我的存储库的本地克隆克隆yadm
到另一个文件夹中。虽然我可以看到本地主yadm
存储库中的所有遥控器,但我只能HEAD
在克隆的yadm
存储库中获取。
看起来像这样:
remote PC (1): commit a (old, not checked out), commit b (HEAD -> master)
local PC - main repository (2): commit a (HEAD -> master), commit b (origin/master, not checked out)
local PC - other repository (3): commit a (HEAD -> master), commit a origin/master
因此,在我的存储库中,3
我只能看到提交a
(在存储库中签出2
),但看不到提交b
(未在存储库中签出2
,但应该在那里可用)。我现在的问题是:如何在我的存储库中获取提交 b3
以及为什么仅通过 ing 所有内容都不起作用git fetch
?
更新 1:对文本进行了少量编辑(希望)使问题更加清晰。
答案1
由于每个存储库都不是裸存储库,至少在重要的地方,它们不是。因此,默认行为似乎是所观察到的,即存储库 3 只能看到存储库 2 的签出提交。
要覆盖此行为,git fetch
有一个可选refspec
参数,可用于专门获取其他修订版本。将其映射到不同的分支可能会让这变得更容易一些。
git fetch origin b
或者由于origin/master
指向 commit b
,使用origin/master
as refspec 也应该有效:
git fetch origin origin/master
同样,在分支或标签上进行提交b
可能会使这种获取变得更容易。如果不是这种情况,则需要通过手动指定提交的哈希来执行合并(尽管它会不是使用 ) 可见git log --all
。