Как мне установить ссылку HEAD на удаленном Git, чтобы она указывала на что-то помимо "master"?
В моем проекте есть политика не использовать «главную» ветку (все ветки должны иметь значимые имена). Кроме того, канонический главный репозиторий доступен только через ssh: // без доступа к оболочке (например, GitHub или Unfuddle).
Моя проблема в том, что в удаленном репозитории все еще есть ссылка HEAD на refs / Heads / master, но мне нужно, чтобы она указывала на другую ветку. Это вызывает две проблемы:
При клонировании репо есть это,
предупреждение: удаленная ГОЛОВА относится к несуществующей ссылке, невозможно оформить заказ.
Это сбивает с толку и неудобно.
Веб-обозреватель кода зависит от HEAD как основы для просмотра дерева. Тогда мне нужно, чтобы HEAD указывал на действительную ветку.
источник
Ответы:
Год назад на GitHub был почти такой же вопрос .
Идея заключалась в том, чтобы переименовать главную ветку:
("
git-symbolic-ref HEAD refs/head/published
" не будет передано в удаленное репо)Это похоже на « Как удалить origin / master в Git ».
Как сказано в этой теме : (выделено мной)
(в этом весь смысл вашего вопроса, я знаю;))
Может быть, единственным выходом будет «издание для бедных» , где вы:
Но для этого потребуется доступ для записи на сервер, что не всегда возможно.
Как я объясняю в « Git: правильный способ изменить активную ветку в пустом репозитории? »,
git remote set-head
Ничего не изменится в удаленном репозитории .Это изменит только ветку удаленного отслеживания, хранящуюся локально в вашем локальном репо, в
remotes/<name>/HEAD
.источник
-f
(--force
). Я соответствующим образом отредактировал ответ. Тогда ответ, который вы ссылаетесь, использует тот же вариант.Обновление: это работает только для локальной копии репозитория («клиент»). Пожалуйста, смотрите комментарии других ниже.
В последней версии git (февраль 2014 г.) правильная процедура будет следующей:
git remote set-head $REMOTE_NAME $BRANCH
Так, например, переключение головы с пульта
origin
на веткуdevelop
будет:git remote set-head origin develop
источник
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Затем вы можете проверить локальные изменения с помощьюcat .git/refs/remotes/origin/HEAD
(это должно бытьref: refs/remotes/origin/default
) и отсутствие удаленных изменений с помощьюgit remote show origin
(это все равно будет тем, что было до добавления ветки по умолчанию).Поскольку вы упомянули GitHub, чтобы сделать это на их сайте, просто войдите в свой проект, затем ...
admin > Default Branch > (choose something)
Готово.
источник
См .: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Это устанавливает ветку по умолчанию в репозитории git. Вы можете запустить это в голых или зеркальных репозиториях.
Использование:
источник
(Уже был практически такой же вопрос « создать символическую ссылку git в удаленном репозитории », на который не было универсального ответа.)
Но есть конкретные ответы для различных "ферм" git (где несколько пользователей могут управлять репозиториями git через ограниченный интерфейс: через http и ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Эти конкретные ответы могут быть полезны для тех, кто читает эту страницу и думает об этих конкретных услугах.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
например,ssh git.alt default-branch packages/autosshd.git sisyphus
для изменения HEAD в удаленном репо,autosshd.git
чтобы он указывал наsisyphus
ветку.источник
Если у вас есть доступ к удаленному репо из оболочки, просто зайдите в .git (или в основной каталог, если это голое репо) и измените файл HEAD, чтобы он указывал на правильную голову. Например, по умолчанию он всегда содержит «refs: refs / Heads / master», но если вам нужно, чтобы foo был вместо HEAD, просто отредактируйте файл HEAD и измените его содержимое на «refs: refs / heads / foo».
источник
myrepo.git
. Содержимое файла HEAD в данном каталоге было изменено сref: refs/heads/master
наref: refs/heads/mainline
. Теперь, когда я пытаюсь клонировать репозиторий в моем локальном ящике, он все еще указывает на master. Я запустилgit clone ssh://gitolite@git.server/myrepo
команду. Есть идеи для такого поведения?git version 1.7.1
& Версия клиента Git:git version 1.9.4.msysgit.2
Вы можете создать отдельную главную ветку, используя только фарфоровые команды Git:
Это дает нам основную ветку с грубым сообщением (вы можете быть более вежливым). Теперь создаем нашу «настоящую» ветку (назовем ее в честь SVN стволом ) и отделяем ее от мастера :
Вуаля! gitk --all покажет мастер и ствол без связи между ними.
«Магия» здесь в том, что --amend заставляет git commit создать новый коммит с тем же родителем, что и текущий HEAD, а затем сделать так, чтобы HEAD указывал на него. Но текущий HEAD не имеет родителя, поскольку это начальная фиксация в репозитории, поэтому новый HEAD также не получает его, что делает их отделенными друг от друга.
Старый коммит HEAD не удаляется git-gc, потому что refs / Heads / master все еще указывает на него.
--Allow пустого флаг нужен только потому , что мы совершаем пустое дерево. Если бы после git rm было несколько git add , в этом не было бы необходимости.
По правде говоря, вы можете создать отдельную ветку в любое время, разветвив исходную фиксацию в репозитории, удалив ее дерево, добавив свое отдельное дерево, а затем выполнив git commit --amend .
Я знаю, что это не отвечает на вопрос о том, как изменить ветку по умолчанию в удаленном репозитории, но дает четкий ответ о том, как создать отдельную ветку.
источник
git fetch git:user@example.com:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
добавит новую веткуdetached-branch
, соответствующую веткеremote-branch-name
в удаленномgit:user@example.com:foo
. Конечно, «удаленным» может быть репозиторий в локальной файловой системе, который вы заранее подготовили.Сначала создайте новую ветку, которую вы хотите установить по умолчанию, например:
$>git branch main
Затем переместите эту ветку в начало координат :
$>git push origin main
Теперь, когда вы входите в свою учетную запись GitHub, вы можете перейти в свой репозиторий, выбрать «Настройки»> «Ветвь по умолчанию» и выбрать « основной ».
Затем, если вы захотите, вы можете удалить главную ветку:
$>git push origin :master
источник
git symbolic-ref
в удаленной оболочке или иным образом изменять текстовый файл, вызываемыйHEAD
в корневом каталоге удаленного репозитория.Что касается вопроса, я оказался здесь, когда искал:
Как сделать так, чтобы локальное репо узнало об измененной ветке по умолчанию на GitHub
Для полноты картины добавляем ответ:
источник
Для гитолитов гитолит поддерживает команду - подождите -
symbolic-ref
. Это позволяет вам запускать эту команду удаленно, если у вас есть разрешение W (запись) в репо.источник
Просто войдите в свою учетную запись GitHub и в дальнем правом углу в меню навигации выберите « Настройки» , на вкладке «Настройки» выберите « Ветвь по умолчанию» и вернитесь на главную страницу своего репозитория, которая сработала для меня.
источник