为什么git ls-remote列出所有的远程引用?

问题描述 投票:2回答:1

我有一个远程回购(origin),其refs目录包含,除了通常的headstagsremotes子目录,还有keep-aroundmerge-requests。这些是由Gitlab管理的内部管家的特殊参考组。

当我使用git ls-remote查询此repo时,该命令列出了merge-requests refs但不列出keep-around请求:

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

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

$ 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中的引用。见this support request from someone with a similar question


附录:有人认为这是Git fetch a specific commit by hash的副本。我不是试图通过哈希获取特定的提交。我想知道为什么远程回购会从其列表中省略某些引用。

git gitlab git-fetch git-ls-remote
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.