Что означает «upload-pack: not our ref» при получении git-ссылок через --tags?

10

В одном из моих проектов сборки Travis терпят неудачу, прежде чем какая-либо из моей системы сборки или кода может быть достигнута, как только мой скрипт сборки пытается извлечь все теги Git с помощью git fetch --tags:

`` git fetch --tags --verbose
POST git-upload-pack (350 bytes)
POST git-upload-pack (788 bytes)
POST git-upload-pack (797 bytes)
From https://github.com/ELLIOTTCABLE/bs-sedlex
 = [up to date]      fix-ci        -> origin/fix-ci
 * [new tag]         sedlex-1.99.2 -> sedlex-1.99.2
 * [new tag]         v1.99.3       -> v1.99.3
...
 * [new tag]         v20.0.0-pre.2 -> v20.0.0-pre.2
Fetching submodule ppx-sedlex
POST git-upload-pack (122 bytes)
From https://github.com/ELLIOTTCABLE/ppx-sedlex
 = [up to date]      develop       -> origin/develop
 = [up to date]      master        -> origin/master
...
 = [up to date]      v20.0.0-pre.2 -> v20.0.0-pre.2
POST git-upload-pack (4 bytes)
POST git-upload-pack (69 bytes)
POST git-upload-pack (586 bytes)
fatal: remote error: upload-pack: not our ref 0f509703fcd43ff4324d721a39220153bab49d4a

Это особенно сбивает с толку, поскольку ни у основного репозитория bs-sedlex, ни у подмодуля git ppx-sedlexнет никакого коммита, начинающегося как 0f5097...; Я понятия не имею, откуда этот SHA. Этот сбой происходит только у работников Linux , и я не могу понять, почему - git fetch --tagsв том же репо работает на MacOS Travis-works, на моей машине с macOS и на Ubuntu Vagrant box, который я запускаю для отладки.

Что означает ошибка "fatal: remote error: upload-pack: not our ref"; и как я могу обойти это? Я даже не уверен, с чего начать отладку этой ошибки, поскольку она возникает только у работников Travis.

(Это вряд ли будет полезным, но здесь есть ошибка в контексте и рассматриваемый репозиторий .)

Редактировать 1: Вот еще один интересный вывод из добавления GIT_TRACE = 2:

Fetching submodule ppx-sedlex
23:55:28.125076 git.c:439               trace: built-in: git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/
23:55:28.125914 run-command.c:663       trace: run_command: git-remote-https origin https://github.com/ELLIOTTCABLE/ppx-sedlex.git
23:55:28.429609 run-command.c:663       trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
23:55:28.432485 run-command.c:663       trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs
23:55:28.434082 git.c:439               trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs
From https://github.com/ELLIOTTCABLE/ppx-sedlex
 = [up to date]      develop       -> origin/develop
 = [up to date]      master        -> origin/master
 = [up to date]      v1.99.4       -> v1.99.4
 = [up to date]      v1.99.4-pre.1 -> v1.99.4-pre.1
 = [up to date]      v1.99.4-pre.3 -> v1.99.4-pre.3
 = [up to date]      v1.99.4-pre.8 -> v1.99.4-pre.8
 = [up to date]      v2.0.0        -> v2.0.0
 = [up to date]      v20.0.0-pre.1 -> v20.0.0-pre.1
 = [up to date]      v20.0.0-pre.2 -> v20.0.0-pre.2
23:55:28.442482 run-command.c:1616      run_processes_parallel: preparing to run up to 1 tasks
23:55:28.442504 run-command.c:1648      run_processes_parallel: done
23:55:28.442536 run-command.c:663       trace: run_command: git gc --auto
23:55:28.443983 git.c:439               trace: built-in: git gc --auto
23:55:28.444903 run-command.c:663       trace: run_command: cd /home/vagrant/ELLIOTTCABLE/bs-sedlex/.git/modules/ppx-sedlex; unset GIT_PREFIX; GIT_DIR=. git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/ origin 0f509703fcd43ff4324d721a39220153bab49d4a
23:55:28.446392 git.c:439               trace: built-in: git fetch --no-prune --no-prune-tags --tags -v --recurse-submodules-default on-demand --submodule-prefix ppx-sedlex/ origin 0f509703fcd43ff4324d721a39220153bab49d4a
23:55:28.447105 run-command.c:663       trace: run_command: git-remote-https origin https://github.com/ELLIOTTCABLE/ppx-sedlex.git
23:55:28.735871 run-command.c:663       trace: run_command: git fetch-pack --stateless-rpc --stdin --lock-pack --thin --no-progress https://github.com/ELLIOTTCABLE/ppx-sedlex.git/
23:55:28.738885 git.c:439               trace: built-in: git fetch-pack --stateless-rpc --stdin --lock-pack --thin --no-progress https://github.com/ELLIOTTCABLE/ppx-sedlex.git/
error: Server does not allow request for unadvertised object 0f509703fcd43ff4324d721a39220153bab49d4a

Я не могу понять, почему Git запрашивает здесь «нерекламированный объект»; но это явно не проблема GitHub, здесь - по какой-то причине, команда:

git fetch --no-prune --no-prune-tags --tags -v \
   --recurse-submodules-default on-demand \ 
   --submodule-prefix ppx-sedlex/ \
   origin 0f509703fcd43ff4324d721a39220153bab49d4a

... автоматически вызывается в субмодуле, когда я git fetchв родительском репо. (Опять же, этот коммит 0f509703не существует ни в одном из репо; опять же, тот же репо, тот же коммит, и это не происходит в macOS - только на машинах Travis Linux).

ELLIOTTCABLE
источник

Ответы:

2

Это особенно запутанно, так как ни у основного репозитория bs-sedlex, ни у git-submodule ppx-sedlex нет коммитов, начинающихся с 0f5097 ...;

Но они могут иметь тег с этим SHA1 (который после разыменования будет указывать на коммит)

Что означает ошибка "fatal: remote error: upload-pack: not our ref";

Смотрите " Клонирование репо с вложенными подмодулями не работает "

Git предоставляет три опции, которые определяют, можете ли вы получить произвольный идентификатор объекта:

  • тот, который позволяет получить любой произвольный объект, к которому у Git есть доступ,
  • тот, который позволяет получить любой объект, доступный из ссылки,
  • и тот, который дополнительно позволяет извлекать объекты, доступные из скрытых ссылок.

Сообщение «не наш ref» означает, что вы пытаетесь получить объект по идентификатору объекта, который используется для субмодулей, но сервер этого не разрешает.

В вашем случае, возможно, что:

  • либо тег в субмодуле никогда не был сдвинут
  • или (поскольку он работает из других источников) Travis-CI не имеет доступа к подмодулю ( частные зависимости ): см. « Git - Подмодули в Travis CI ».
    Или у него есть какая-то кешированная версия этого подмодуля.
VonC
источник