Ветвь существует, но ее нельзя увидеть в ссылках / заголовках - PullRequest
0 голосов
/ 05 ноября 2018

В пустом хранилище (без рабочей папки) на компьютере с BitBucket Server у меня есть две ветви выпуска:

# git branch --list | grep release
warning: ignoring broken ref refs/heads/integration/Team
  release/2018r1
  release/2018r2

Но если я посмотрю в refs/heads, ни одна из этих ветвей не будет видна:

# ls refs/heads/release
testing

Ветвь testing - это ветка, которая была удалена некоторое время назад.

Как могут release/2018r1 и release/2018r2 существовать (и быть замеченными git branch --list), но не появляться в refs/heads?

А почему старая ветка release/testing появляется в refs/heads, когда ее больше нет?

1 Ответ

0 голосов
/ 05 ноября 2018

Имена ссылок могут быть либо упакованы (хранятся в .git/packed-refs, который является обычным файлом), либо распакованы (сохраняются по одному на файл). Ссылка, которая существует как распакованная, так и упакованная, имеет текущее значение, сохраненное в распакованной копии, т.е. упакованная копия не удаляется автоматически.

В этом случае две «невидимые» ссылки, без сомнения, упакованы. Мне не понятно, что происходит с refs/heads/release/testing.

Будущая версия Git может вообще прекратить хранить имена ссылок в текстовых файлах, поскольку в файловых системах Windows и MacOS имена файлов имеют проблемы с переносом регистра. Используйте git for-each-ref и git update-ref (и аналогичные) для чтения и записи ссылочных значений, чтобы быть готовыми к будущему Git, использующему фактическую базу данных значений ключей.

...