Хранилище git symbolic-ref на центральном уровне репо
Идея состоит в том, чтобы dev_release_branch все время действовал как псевдоним последней ветки релиза этой среды ( dev в этом примере).
И иметь новую ветку, созданную после каждого выпуска по некоторому соглашению, и обновлять symb ref каждый раз после завершения миграции или выпуска в соответствующий en.
git symbolic-ref -m "Updating rel branch ref to new" dev_rel_3rd_Nov dev_release_branch
Хотелось бы хранить и ссылку, и ее отображенное имя в центральном хранилище. Есть ли способ сделать это так просто? git push HEAD:refs/for/dev_branch
терпит неудачу
Это необходимо для поддержки процесса постепенного выпуска, и, следовательно, изменение компьютерных файлов будет проще, если сравнивать 2 хэша имен ветвей.
Спасибо!
2 ответа
Хотелось бы хранить и ссылку, и ее отображенное имя в центральном хранилище. Есть ли способ достичь этого...
Не от клиента по протоколам Git.
Также, git symbolic-ref
является командой "слесарного дела" (предназначенной для сценариев, а не случайного использования), и, как следствие, требует, чтобы вы указали полную ссылку, например:
git symbolic-ref refs/heads/foo refs/heads/master
Почему ответ "нет"
Давайте создадим правильную символьную ссылку и попробуем нажать на нее:
$ git branch xyz master
$ git symbolic-ref refs/heads/foo refs/heads/xyz
$ git push origin foo
To [url]
* [new branch] foo -> xyz
Теперь на сервере для origin
:
$ git branch
* master
xyz
Я думаю, это то, что вы заметили, заставило вас сказать:
просто
git push HEAD:refs/for/dev_branch
терпит неудачу
Проблема здесь в том, что push
Протокол буквально не имеет возможности выдвинуть символическую ссылку. Протокол состоит из серии запросов для установки имен ссылок на конкретные хеш-идентификаторы. Символьная ссылка - это ссылка, для которой задана строка, которая не является хеш-идентификатором.
Это означает, что для клиента единственный способ создать новую символьную ссылку на сервере - это запускать команды Git непосредственно на этом сервере, например:
ssh server "cd path/to/git/repo; git symbolic-ref ..."
Протокол выборки позволяет получать символические ссылки (в современном Git), но протокол push не позволяет их устанавливать.
Как ответил Торек, это невозможно.
Но для меня это все равно похоже на проблему XY.
Ваша реальная проблема кажется решаемой: просто добавьте тег dev_release_branch
и обновлять это после каждого выпуска (используя -f
на tag
а также push
). Тогда дело за творческим использованием git log
, git show
или какой-нибудь скрипт .git/refs
найти соответствующее имя отдельного филиала.