Мерзавец: Корректный способ изменить Активное Ответвление в пустом репозитории?

У меня есть пустой репозиторий, это используется в качестве центрального хранилища для моего проекта. Все разработчики делают git clone <repo> совместно использовать с ним. Когда они делают клон, они получают контроль основного ответвления (если они не делают git clone -n) потому что repo.git/HEAD содержит ref: refs/heads/master, создание этого Активное Ответвление.

Вопрос, как я изменяю Активное Ответвление правильно? Я мог просто взломать repo.git/HEAD зарегистрируйте непосредственно, но это кажется противным и, ну, в общем, hacky.

Я пытался делать git checkout <otherbranch> в repo .git каталог, но это перестало работать, потому что я не был в дереве работы.

Я попробовал git update-ref HEAD refs/heads/otherbranch но это просто обновило судей/головы/ведущее устройство для совпадения с refs/heads/otherbranch (хорошо, я сделал тот в фиктивном репозитории, не мое производство один!)

Я попробовал git update-ref --no-deref HEAD refs/heads/otherbranch и это почти работало. Это обновило HEAD файл, но это установило его на SHA1 фиксации, которой указывают refs/heads/otherbranch.

Я тестирую с версией мерзавца 1.7.0.2.msysgit.0.

Я предполагаю, что нет никакого способа сделать это через git push, как разрешение все до одного изменить Ваше ответвление по умолчанию кажутся немного небезопасными (!), но конечно существует лучший способ сделать это в repo .git каталог, чем прямое взламывание HEAD файл.

185
задан Atcold 3 May 2014 в 07:20
поделиться

1 ответ

Если у вас есть доступ к удаленному голому репозиторию, в этой статье предлагается :

git symbolic-ref HEAD refs/heads/mybranch

который обновит файл HEAD в вашем репозитории, чтобы он содержал:

ref: refs/heads/mybranch

, как описано в git-symbolic-ref


. Если у вас нет доступа к удаленному репо, см. мой предыдущий ответ .


Помните, что команда типа git remote set-head :

  • не изменяет ветвь по умолчанию для репозитория remote .
    Он изменяет только ветку удаленного отслеживания , хранящуюся в вашем локальном репозитории, поскольку refs / remotes / / HEAD

  • не меняет HEAD ] (опять же, только refs / remotes / / HEAD ), следовательно, необходимость в git symbolic-ref .

Итак, git remote set-head не ответ здесь.
git symbolic-ref HEAD есть, если у вас есть прямой доступ к удаленному репо.

268
ответ дан 23 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: