Почему git ls-remote не перечисляет все удаленные ссылки? - PullRequest
2 голосов
/ 13 марта 2019

У меня есть удаленное репо (origin), каталог которого refs содержит, помимо обычных подкаталогов heads, tags и remotes, также keep-around и merge-requests.Это специальные наборы ссылок, которые управляются Gitlab для внутреннего ведения.

Когда я использую git ls-remote для опроса этого репо, команда перечисляет 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 я не вижу ничего, что могло бы быть связано с этим.Что вызывает другое поведение?


Приложение: Мередит Ховард предполагает, что это может быть особенностью Gitlab;есть специальный конфиг Gitlab, в котором указывается скрывать ссылки в refs/keep-around.См. этот запрос поддержки от кого-то с похожим вопросом .


Приложение: Было предложено, чтобы это было дубликатом Git, чтобы получить определенный коммит по хешу Я не пытаюсь получить конкретный коммит по хешу.Я хочу знать, почему в удаленном репо отсутствуют определенные ссылки в его списке.

1 Ответ

1 голос
/ 13 марта 2019

Каждый сайт веб-хостинга Git может с помощью любых механизмов конфигурации, которые этот сайт использует (скорее всего, --system конфигурационный файл), скрывать любые ссылки, которые ему нравятся. У самого Git есть универсальный механизм для этого: transfer.hideRefs. Подробности смотрите в документации git config . Если вы используете свои собственные серверы, вы можете настроить их следующим образом.

...