Измените удаленный HEAD Git, чтобы указать на что-то помимо мастера

Как установить ссылку Git удаленной HEAD, чтобы указать на что-то помимо "master"?

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

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

  • При клонировании репо есть,

    warning: remote HEAD ссылается на несуществующий ref, неспособный проверить.

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

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

+113
источник поделиться
10 ответов

Почти год назад тот же вопрос о GitHub год назад.

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

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

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

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

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


Как сказано в этот поток: (выделение мое)

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

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

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

  • Ссылки HEAD refs/heads/anotherBranch и что существует → вы получаете локальную ветвь с именем anotherBranch, начиная с origin/anotherBranch

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

Не уверен, что есть какой-либо способ прямого изменения ref в репо.

(это все указывает на ваш вопрос, я знаю;))


Возможно, единственным способом было бы "публикация для бедных" , где вы:

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

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


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

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

+57
источник

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

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

git remote set-head $REMOTE_NAME $BRANCH

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

git remote set-head origin develop

+39
источник
другие ответы

Связанные вопросы


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

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

admin > Default Branch > (choose something)

Готово.

+33
источник

Смотрите: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

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

ИСПОЛЬЗОВАНИЕ:

$git symbolic-ref HEAD refs/heads/< название ветки >

+10
источник

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

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

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

+7
источник

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

+6
источник

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

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

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

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

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

"Магия" здесь заключается в том, что - изменить вызывает git commit, чтобы создать новый коммит с тем же родителем, что и текущий HEAD, а затем сделать точку HEAD к нему. Но текущий HEAD не имеет родителя, поскольку он является первоначальной фиксацией в репозитории, поэтому новый HEAD также не получает одного из них, что делает их отстраненными друг от друга.

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

Флаг - allow-empty нужен только потому, что мы делаем пустое дерево. Если после git rm было git добавить, тогда это было бы необязательно.

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

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

+5
источник

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

$>git branch main

Затем нажмите эту ветвь на origin:

$>git push origin main

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

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

$>git push origin :master

+2
источник

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

0
источник

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

-1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос