为什么 git ls-remote 不列出所有远程引用?
Why doesn't git ls-remote list all the remote refs?
我有一个远程仓库 (origin
),其 refs
目录除了通常的 heads
、tags
和 remotes
子目录外还包含,还有 keep-around
和 merge-requests
。这些是由 Gitlab 管理的特殊参考集,用于内部管理。
当我使用 git ls-remote
查询此 repo 时,该命令列出了 merge-requests
引用,但没有列出 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
中的引用。参见 this support request from someone with a similar question。
附录:有人建议这是 Git fetch a specific commit by hash 的副本。我不是想通过哈希获取特定的提交。我想知道为什么远程仓库从其列表中省略了某些引用。
每个 Git 网站托管站点都可以通过站点使用的任何配置机制(很可能是 --system
配置文件)隐藏它喜欢的任何引用。 Git 本身有一个通用机制:transfer.hideRefs
。有关详细信息,请参阅 the git config
documentation。如果您 运行 您自己的服务器,您可以这样设置它们。
我有一个远程仓库 (origin
),其 refs
目录除了通常的 heads
、tags
和 remotes
子目录外还包含,还有 keep-around
和 merge-requests
。这些是由 Gitlab 管理的特殊参考集,用于内部管理。
当我使用 git ls-remote
查询此 repo 时,该命令列出了 merge-requests
引用,但没有列出 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
中的引用。参见 this support request from someone with a similar question。
附录:有人建议这是 Git fetch a specific commit by hash 的副本。我不是想通过哈希获取特定的提交。我想知道为什么远程仓库从其列表中省略了某些引用。
每个 Git 网站托管站点都可以通过站点使用的任何配置机制(很可能是 --system
配置文件)隐藏它喜欢的任何引用。 Git 本身有一个通用机制:transfer.hideRefs
。有关详细信息,请参阅 the git config
documentation。如果您 运行 您自己的服务器,您可以这样设置它们。