2

我有一个远程 repo ( origin),其refs目录除了通常headstags、 和remotes子目录外,还 包含keep-aroundmerge-requests. 这些是Gitlab为其内部管理管理的特殊引用集。

当我git ls-remote用来询问这个 repo 时,该命令列出了merge-requestsrefs 而不是keep-around请求:

$ git ls-remote
5ef8f113ba35360de0dfc015601bb832bacb5505        HEAD
... lots of refs/heads/...
... lots of refs/merge-requests/...
... lots of refs/tags...

同样,我可以获取merge-requests参考,例如

$ git fetch origin refs/merge-requests/999/head
From git.company.com:Company/company
 * branch                    refs/merge-requests/999/head -> FETCH_HEAD

但是当我要求keep-around参考时,远程回购声称它不存在,即使我知道它确实存在:

$ git fetch origin  refs/keep-around/291ad6a6bebf067377700d430ac130d758ed52e9
fatal: couldn't find remote ref refs/keep-around/291ad6a6bebf067377700d430ac130d758ed52e9
fatal: The remote end hung up unexpectedly

我在远程仓库中看不到任何config与此相关的内容。是什么导致了不同的行为?


附录:Meredith Howard 认为这可能是 Gitlab 的一个特性;有一个特殊的 Gitlab 配置,它专门告诉它隐藏refs/keep-around. 请参阅有类似问题的人的此支持请求


附录:有人建议这是Git fetch a specific commit by hash的副本。我不是想通过哈希来获取特定的提交。我想知道为什么远程仓库在其列表中省略了某些参考。

4

1 回答 1

2

每个 Git Web 托管站点都可以通过站点使用的任何配置机制(很可能是--system配置文件)隐藏它喜欢的任何引用。Git 本身对此有一个通用机制:transfer.hideRefs. 有关详细信息,git config请参阅文档。如果您运行自己的服务器,则可以这样设置它们。

于 2019-03-13T15:30:25.870 回答