Подтвердить что ты не робот

Какое рекомендуемое использование символической ссылки Git?

Следующий код оболочки правильно создает цепочку символических ссылок

git symbolic-ref "first" "refs/heads/master"
git symbolic-ref "second" "first"
git symbolic-ref "nested/third" "second"
git symbolic-ref "refs/heads/fourth" "nested/third"

И следующий код оболочки правильно решает последнюю созданную символическую ссылку на вершину мастера.

git show-ref "refs/heads/fourth"

Ни один из этих случаев использования не описан в официальной документации (git -symbolic-ref doc, git -show-ref doc).

Однако, не работает

 git check-ref-format --print "first"

Итак, мои вопросы:

  • Можно ли хранить символическую ссылку в каталоге refs/heads?
  • Можно ли закодировать символические ссылки?
  • Как сбой при обращении к методу check-ref-format при передаче "first", означает ли это, что не рекомендуется создавать символическую ссылку на том же уровне, что и "HEAD"? Или, может быть, эта команда не предназначена для обозначения символических ссылок?

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

4b9b3361

Ответ 1

Я в конце концов отправил этот вопрос в список рассылки git.

Junio ​​C Hamano, ведущий git сопровождающий (+8700 коммитов) предоставил мне следующие ответы.

Существует только два действительных вида symrefs прямо сейчас:

  • .git/HEAD, указывая где-то на ссылку refs/heads/hierarchy;

  • .git/refs/remotes/{какое-то удаленное имя}/HEAD, указывая где-нибудь под refs/remotes/{тот же пульт name}/hierarchy.

Код может быть готов к разрешению рекурсивные симрефы, симрефы, кроме вышеупомянутые два вида, symrefs, что точку в другом месте, но все они находятся вне сферы разработки какой механизм был предназначен для поддержка. Что делает код для них (без сбоев) - это не дизайн, а просто поведение undefined.

Это не изменится очень сильно, если мы принять решение о реорганизации удаленного иерархии отслеживания в 1.8.0. прежний не изменится вообще, и последний начнет указывать на refs/remotes/{тот же пульт name}/head.

Я смутно помню, как tg злоупотреблял symref механизм для пункта .git/HEAD при забавном местах; он все еще может это сделать, и если это так, мы должны распространите вышеуказанный список, чтобы использование.

Ответ 2

Как правило, symrefs живут под refs/ - по крайней мере, это то, что делает пакет git (например, при использовании дерева фильтров git вы получаете refs/original/...). Некоторые инструменты могут игнорировать ссылки, которые не имеют префикса refs/.

$ git symbolic-ref refs/first refs/heads/master
$ git check-ref-format --print refs/first
refs/first

Ответ 3

Было бы желательно, чтобы символические ссылки могли использоваться более прозрачно и могут быть также нажаты. Они могут стать мощным инструментом для новых рабочих процессов. В настоящее время, если я создаю символическую ссылку и затем нажимаю, сервер будет иметь хэш не ссылку в соответствующей ссылке.