Ошибка при попытке создать git-пакет между 2 коммитами

Я пытаюсь создать файл комплекта из коммита x, чтобы зафиксировать y. Как указано в документации git bundle, аргументы должны быть "приемлемы для git rev-parse и git rev-list ..., который указывает конкретные объекты и ссылки для транспорта". Однако, когда я запускаю следующую команду:

git bundle create test.bundle 15b423..6cffeab

Я получаю ошибку

error: Refusing to create empty bundle.

Затем я убедился, что на коммиты могут ссылаться rev-list и rev-parse:

ana@DESKTOP-K400GGC MINGW64 ~/Projects/TEST1 ((20dc3fd...))
$ git rev-list 15b423b 6cffeab
6cffeabc7e3183fcca8cb8b91eecbf9e0af5a0e7
beb6fb7cfda467433cb2cdab362a25178b1ddf18
458cfcd0064b229f8b416d65405f18732d8c359a
53c90498e13edd32248842b3fd4fb7819041a1d6
ba087013804d4a39b36f3e679548fb45fe9645fb
ad1b1fde27be98b5b09d8e5a43137d16fd6e1840
540da9dea1b816a20be11e5c53b94467449266af
aa64d78ab5c990b047711b9f81fdae13beb27a05
15b423b91a63c403fe0ee0f3365c9846f37f3aa4

ana@DESKTOP-K400GGC MINGW64 ~/Projects/TEST1 ((20dc3fd...))
$ git rev-parse 15b423..6cffeab
6cffeabc7e3183fcca8cb8b91eecbf9e0af5a0e7
^15b423b91a63c403fe0ee0f3365c9846f37f3aa4

Почему это не работает? Как я могу создать пакетный файл, который варьируется от коммита A до коммита B?

2 ответа

Решение

Из документации git bundle (в разделе "Задание ссылок"): "git bundle будет использовать только те ссылки на пакеты, которые показаны git show-ref: сюда входят заголовки, теги и удаленные заголовки". Так что, если вы добавили теги к этим коммитам, ваша команда должна работать.

Я согласен, что строка, которую вы цитировали, создает впечатление, что ваша команда будет работать, ИМХО, это не очень понятно.

В Git 2.34 (4 квартал 2021 г.) документация стала более ясной и включает ваш вариант использования:

См. Commit 1d9c8da, , commit 9ab80dd, commit 5c8273d (31 июля 2021 г.), автор: var Arnfjörð Bjarmason ( avar) .
(Слияние Junio ​​C Hamano - gitster- в коммите f19b275, 24 августа 2021 г.)

commit 0bb92f3bundle doc: подробнее об ограничении rev<-> ref

Подписано: var Arnfjör Bjarmason

Подробно проработайте ограничение, согласно которому вы не можете предоставить версию, которая не разрешает ссылку в " SPECIFYING REFERENCES"раздел с примерами.

git bundleтеперь включает в свою справочную страницу :

Изменения должны сопровождаться ссылочными именами, чтобы они были упакованы в пакет.

Может быть упаковано более одной ссылки и может быть указано более одной основы. Упакованные объекты - это объекты, не входящие в совокупность данных баз.

Команда 'git bundle create' разрешает ссылочные имена за вас, используя те же правила, что и git rev-parse --abbrev-ref=loose. Каждая основа может быть указана явно (например, ^master~10) или неявно (например, master~10..master, --since=10.days.ago master).

Все эти простые случаи допустимы (при условии, что у нас есть «главная» и «следующая» ветки):

       ----------------
$ git bundle create master.bundle master
$ echo master | git bundle create master.bundle --stdin
$ git bundle create master-and-next.bundle master next
$ (echo master; echo next) | git bundle create master-and-next.bundle --stdin
----------------

И эти (и те же, но опущенные --stdin Примеры):

       ----------------
$ git bundle create recent-master.bundle master~10..master
$ git bundle create recent-updates.bundle master~10..master next~5..next
----------------

Имя ревизии или диапазон, правая часть которого не может быть разрешена в ссылку, не принимаются:

       ----------------
$ git bundle create HEAD.bundle $(git rev-parse HEAD)
fatal: Refusing to create empty bundle.
$ git bundle create master-yesterday.bundle master~10..master~5
fatal: Refusing to create empty bundle.
----------------
Другие вопросы по тегам