Измените Git remote HEAD таким образом, чтобы он указывал на что-то, кроме master

StackOverflow https://stackoverflow.com/questions/1485578

  •  18-09-2019
  •  | 
  •  

Вопрос

Как мне настроить головную ссылку Git remote так, чтобы она указывала на что-то, кроме "master"?

В моем проекте действует политика не использовать "главную" ветвь (все ветви должны иметь осмысленные имена).Кроме того, главный репозиторий canonical доступен только через ssh://, без доступа к оболочке (например, GitHub или Unfuddle).

Моя проблема в том, что в удаленном репозитории все еще есть ссылка HEAD на refs / heads / master, но мне нужно, чтобы она указывала на другую ветвь.Это вызывает две проблемы:

  1. При клонировании репозитория существует это,

    предупреждение:удаленный ЗАГОЛОВОК ссылается на несуществующую ссылку, которую невозможно оформить.

    Это сбивает с толку и неудобно.

  2. Веб-браузер кода зависит от HEAD как основы для просмотра дерева.Тогда мне нужно, чтобы HEAD указывал на действительную ветвь.

Это было полезно?

Решение

Там было почти то же самое тот же вопрос на GitHub год назад.

Идея состояла в том, чтобы переименовать главную ветвь:

git branch -m master development
git branch -m published master
git push -f origin master 

Сделайте так, чтобы у master было то, что вы хотите, чтобы люди использовали, и выполняйте всю остальную работу в филиалах.

(а "git-symbolic-ref HEAD refs/head/published" не будет распространен на удаленное репо)

Это похоже на "Как мне удалить origin / master в Git".


Как сказано в этот поток:(курсив мой)

"git clone" создает только один локальный филиал.
Чтобы сделать это, он смотрит на HEAD ref удаленного репозитория и создает локальную ветвь с тем же именем, что и удаленная ветвь, на которую он ссылается.

Итак, чтобы завершить это, у вас есть репозиторий A и клонируйте его:

  • HEAD ссылки refs/heads/master и это существует
    -> вы получаете локальную ветвь под названием master, начиная с origin / master

  • Ссылки на заголовки refs/heads/anotherBranch и это существует
    -> вы получаете местное отделение под названием anotherBranch, начиная с origin/anotherBranch

  • Ссылки на заголовки refs/heads/master и этого не существует
    -> "git clone" жалуется

Не уверен, есть ли какой-либо способ напрямую изменить HEAD ссылка в репозитории.

(в этом весь смысл вашего вопроса, я знаю ;) )


Может быть единственным способом было бы "издание для бедных", где ты:

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

Но это потребовало бы доступа на запись к серверу, что не всегда возможно.


Как я объясняю в "Мерзавец:Правильный способ изменить активную ветку в голом репозитории?", git remote set-head это ничего бы не изменило в удаленном репозитории.

Это изменило бы только ветку удаленного отслеживания, хранящуюся локально в вашем локальном репозитории, в remotes/<name>/HEAD.

Другие советы

Обновить: Это работает только для локальной копии репозитория ("клиент").Пожалуйста, ознакомьтесь с комментариями других пользователей ниже.

С последней версией git (февраль 2014) правильная процедура была бы:

git remote set-head $REMOTE_NAME $BRANCH

Так, например, переключение головки на пульте дистанционного управления origin к ответвлению develop было бы:

git remote set-head origin develop

Поскольку вы упомянули GitHub, тогда, чтобы сделать это на их сайте, просто зайдите в свой проект...

admin > Default Branch > (choose something)

Выполнено.

Видишь: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

Это устанавливает ветвь по умолчанию в репозитории git.Вы можете запустить это в открытых или зеркальных репозиториях.

Использование:

$ git symbolic-ref HEAD refs/heads/<branch name>

(Там уже был в основном тот же вопрос "создайте символическую ссылку git в удаленном репозитории", на который не было получено универсального ответа.)

Но есть конкретные ответы для различных "ферм" git (где несколько пользователей могут управлять репозиториями git через ограниченный интерфейс:через http и ssh): http://Github.com, http://Gitorious.org, http://repo.or.cz, Girar (http://git.altlinux.org).

Эти конкретные ответы могут быть полезны для тех, кто читает эту страницу и думает об этих конкретных услугах.

Если у вас есть доступ к удаленному репозиторию из командной строки, просто зайдите в .git (или в основной каталог, если это простое репозиторий) и измените файл HEAD, чтобы он указывал на правильный head.Например, по умолчанию он всегда содержит 'ссылки:refs/heads /master', но если вам нужно, чтобы foo был вместо этого заголовком, просто отредактируйте файл HEAD и измените содержимое на 'refs:ссылки / головы/foo'.

Вы можете создать отдельный мастер ветвь, использующая только фарфоровые команды Git:

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

Это дает нам мастер ответьте с грубым сообщением (возможно, вы захотите быть более вежливым).Теперь мы создаем нашу "настоящую" ветку (давайте назовем ее багажник в честь SVN) и отделить его от мастер:

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

Эй, престо! gitk - все покажет мастер и багажник без какой-либо связи между ними.

"Магия" здесь заключается в том, что --внести поправки причины git совершить чтобы создать новый коммит с тем же родительским элементом, что и текущий заголовок, затем сделайте так, чтобы ЗАГОЛОВОК указывал на него.Но у текущего HEAD нет родительского элемента, поскольку это начальный коммит в репозитории, поэтому новый HEAD также его не получает, что делает их отделенными друг от друга.

Старый головной коммит не удаляется с помощью git-gc-мерзавец потому что refs / heads / master все еще указывает на это.

В --разрешить-пустой флаг нужен только потому, что мы фиксируем пустое дерево.Если бы там были какие - то git добавитьэто после того , как мерзавец rm тогда в этом не было бы необходимости.

По правде говоря, вы можете создать отдельную ветку в любое время, разветвив начальную фиксацию в репозитории, удалив ее дерево, добавив свое отдельное дерево, затем выполнив git commit - изменить.

Я знаю, что это не отвечает на вопрос о том, как изменить ветку по умолчанию в удаленном репозитории, но это дает четкий ответ о том, как создать отдельную ветку.

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

$>git branch main

Затем подтолкните эту ветвь к происхождение:

$>git push origin main

Теперь, когда вы входите в свою учетную запись GitHub, вы можете перейти в свой репозиторий и выбрать Настройки> Ветвь по умолчанию и выбрать "Главная."

Затем, если вы того пожелаете, вы можете удалить главную ветвь:

$>git push origin :master

Для пользователей gitolite gitolite поддерживает команду с именем -- wait для нее -- symbolic-ref.Это позволяет вам запускать эту команду удаленно, если у вас есть разрешение W (на запись) в репозиторий.

В связи с вопросом, я оказался здесь при поиске:

Как мне сообщить локальному репозиторию об измененной ветке по умолчанию на GitHub

Для полноты картины добавляю ответ:

git remote set-head origin -a

Просто войдите в свою учетную запись GitHub и в правой части навигационного меню выберите Настройки, в Вкладка " Настройки" выбирай Ветвь по умолчанию и вернитесь обратно на главную страницу вашего репозитория, которая сделала свое дело за меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top