Измените удаленный HEAD Git, чтобы указать на что-то помимо мастера
Как установить ссылку Git удаленной HEAD, чтобы указать на что-то помимо "master"?
В моем проекте есть политика не использовать ветвь "master" (все ветки должны иметь значащие имена). Кроме того, канонический мастер-репозиторий доступен только через ssh://, без доступа к оболочке (например, GitHub или Unfuddle).
Моя проблема заключается в том, что в удаленном репозитории по-прежнему имеется ссылка HEAD на refs/heads/master, но мне нужно, чтобы он указывал на другую ветку. Это вызывает две проблемы:
-
При клонировании репо есть,
warning: remote HEAD ссылается на несуществующий ref, неспособный проверить.
Это сбивает с толку и неудобно.
-
Браузер веб-браузера зависит от HEAD как основы для просмотра дерева. Мне нужно, чтобы HEAD указывала на действительную ветвь.
Ответы
Ответ 1
Почти год назад тот же вопрос о 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
.
Ответ 2
Обновление:. Это работает только для локальной копии репозитория ( "клиент" ). Пожалуйста, ознакомьтесь с комментариями других пользователей ниже.
В последней версии git (февраль 2014) правильная процедура:
git remote set-head $REMOTE_NAME $BRANCH
Так, например, переключение головки на пульте дистанционного управления origin
на ветку develop
будет следующим:
git remote set-head origin develop
Ответ 3
Поскольку вы упоминаете GitHub, чтобы сделать это на своем сайте, просто зайдите в свой проект, затем...
admin > Default Branch > (choose something)
Готово.
Ответ 4
Смотрите: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Это устанавливает ветвь по умолчанию в репозитории git. Вы можете запускать его в виде голых или зеркальных репозиториев.
ИСПОЛЬЗОВАНИЕ:
$git symbolic-ref HEAD refs/heads/< название ветки >
Ответ 5
(Был уже в основном такой же вопрос: создать символический ref git в удаленном репозитории", который не получил универсального ответа.)
Но существуют конкретные ответы для различных ферм git "(где несколько пользователей могут управлять репозиториями git через ограниченный интерфейс: через http и ssh): http://GitHub.com, http://gitorious.org, http://repo.or.cz, Girar ( http://git.altlinux.org).
Эти конкретные ответы могут быть полезны для тех, кто читает эту страницу и думает об этих конкретных сервисах.
Ответ 6
Если у вас есть доступ к удаленному репо из командной оболочки, просто зайдите в .git(или основной каталог, если он является открытым репо) и измените файл HEAD, чтобы указать на правильную головку. Например, по умолчанию он всегда содержит "refs: refs/heads/master", но если вам нужно, чтобы Foo был HEAD, просто отредактируйте HEAD файл и измените содержимое на "refs: refs/heads/foo".
Ответ 7
Вы можете создать отсоединенную ветвь 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.
Я знаю, что это не отвечает на вопрос о том, как изменить ветвь по умолчанию в удаленном репозитории, но дает чистый ответ о том, как создать отдельную ветвь.
Ответ 8
Сначала создайте новую ветку, которую вы хотите установить как по умолчанию, например:
$>git branch main
Затем нажмите эту ветвь на origin:
$>git push origin main
Теперь, когда вы входите в свою учетную запись GitHub, вы можете перейти в свой репозиторий и выбрать "Настройки" > "По умолчанию" и выбрать " main".
Затем, если вы так решите, вы можете удалить главную ветку:
$>git push origin :master
Ответ 9
Для гитолит-людей гитолит поддерживает команду под названием-wait it- symbolic-ref
. Он позволяет удаленно запускать эту команду, если у вас есть разрешение W (write) на репо.
Ответ 10
Просто зарегистрируйтесь в своей учетной записи GitHub и в правой части меню навигации выберите Настройки, в вкладке "Параметры" выберите Филиал по умолчанию. > и вернитесь на главную страницу вашего репозитория, который помогло.