Що означає "upload-pack: не наш ref", коли ви отримуєте git refs через --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-робітників, на моїй машині macOS та на коробці Ubuntu Vagrant.

Що означає помилка "фатальна: віддалена помилка: upload-pack: не наша посилання"; і як я можу обійти це? Я навіть не впевнений, з чого почати налагодження цієї помилки, оскільки вона трапляється спеціально у працівників 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 - лише на машинах Linux Travis.)

Відповіді:


2

Це особливо заплутано, оскільки ні основний репо-bs-sedlex, ні git-підмодуль ppx-sedlex не мають жодних комітів, починаючи як 0f5097 ...;

Але вони можуть мати тег із цим SHA1 (який, як тільки буде відновлено, вказував би на зобов'язання)

Що означає помилка "фатальна: віддалена помилка: upload-pack: не наша посилання";

Див. " Клонування репо з вкладеними підмодулями не працює "

Git пропонує три варіанти, які контролюють, чи можна отримати довільний ідентифікатор об'єкта:

  • той, який дозволяє отримати будь-який довільний об'єкт, до якого Git має доступ,
  • той, який дозволяє отримати будь-який об'єкт, доступний за допомогою посилання,
  • і той, який додатково дозволяє отримувати об'єкти, доступні за допомогою прихованих посилань.

Повідомлення "не наша реф" означає, що ви намагаєтеся отримати об'єкт за ідентифікатором об'єкта, який використовується для підмодулів, але сервер цього не дозволяє.

У вашому випадку можливо, що:

  • або тег у підмодулі ніколи не висувався
  • або (оскільки він працює з інших джерел) Travis-CI не має доступу до підмодулю ( приватні залежності ): див. " Git - Підмодулі в Travis CI ".
    Або в ньому є якась кешована версія цього підмодуля.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.