Измените удаленную головку Git, чтобы указать на что-то помимо мастера
Как установить головную ссылку git remote, чтобы указать на что-то помимо "master"?
мой проект имеет политику не использовать ветку "master" (все ветви должны иметь значимые имена). Кроме того, канонический главный репозиторий доступен только через ssh://, без доступа к оболочке (например, GitHub или Unfuddle).
моя проблема заключается в том, что удаленный репозиторий по-прежнему имеет головную ссылку на refs/heads/master, но мне нужно, чтобы она указывала на другую ветвь. Это вызывает две проблемы:
при клонировании РЕПО, там это,
предупреждение: удаленная головка ссылается на несуществующий ref, неспособный к проверке.
Это сбивает с толку и неудобно.
веб-браузер кода зависит от HEAD в качестве основы для просмотра дерева. Тогда мне нужна голова, чтобы указать на действительную ветку.
10 ответов:
было бы тот же вопрос на GitHub год назад.
идея состояла в том, чтобы переименовать главную ветвь:
git branch -m master development git branch -m published master git push -f origin masterсоздание мастер есть то, что вы хотите, чтобы люди использовали, и делать все другие работы в филиалах.
(a"
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 /
(там уже был в основном тот же вопрос "создать символическую ссылку git в удаленном репозитории", который не получил никакого универсального ответа.)
но есть конкретные ответы для различных "ферм" git (где несколько пользователей могут управлять репозиториями git через ограниченный интерфейс: через http и ssh):http://Github.com, http://Gitorious.org, http://repo.or.cz,Girar (http://git.altlinux.org).
эти конкретные ответы могут быть полезны для тех, кто читает эту страницу и думать о таких специфических услуг.
- теперь у них есть выпадающее меню для выбора головной ветви по адресу http://repo.or.cz (пример:http://repo.or.cz/editproj.cgi?name=for-me-and-for-all_imz.git);
- и на http://gitorious.org, тоже (посмотрите где-нибудь в настройках);
- и на http://GitHub.com: admin > default Branch > (выберите что-нибудь) (благодаря ответу @srcspider);
- С П2.6, ветвь по умолчанию может быть установлена в веб-интерфейс в разделе "Проекты" > "список" > > 'филиалы'. В v2. 12, Геррит добавлена новая команда set-head что может быть используется через ssh.
- и в Girar (работает на http://git.altlinux.org для создания пакетов для дистрибутива ALT), можно использовать интерфейс ssh для этого:
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $напримерssh git.alt default-branch packages/autosshd.git sisyphusчтобы изменить голову в удаленном РЕПОautosshd.gitуказатьsisyphusфилиала.
Если у вас есть доступ к удаленному РЕПО из оболочки, просто зайдите в нее .git (или основной каталог, если это голое РЕПО) и измените файл HEAD, чтобы указать на правильную голову. Например, по умолчанию он всегда содержит "refs: refs/heads/master", но если вам нужно, чтобы foo был головой, просто отредактируйте файл HEAD и измените содержимое на "refs: refs/heads/foo".
Вы можете создать отдельно мастер ветвь, использующая только фарфоровые команды Git:
git init touch GO_AWAY git add GO_AWAY git commit -m "GO AWAY - this branch is detached from reality"это дает нам мастер ветка с грубым сообщением (вы можете быть более вежливым). Теперь мы создаем нашу" настоящую " ветку (назовем ее багажник в честь СВН) и развести его с мастер:
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. Но у текущей головки нет родителя, поскольку это начальная фиксация в репозитории, поэтому новая головка также не получает ее, что делает их отделенными друг от друга.
старый главный коммит не удаляется git-gc потому что refs / heads / master все еще указать на него.
The -- allow-empty флаг нужен только потому, что мы совершаем пустое дерево. Если бы были какие-то git addпосле git rm тогда в этом не будет необходимости.
по правде говоря, вы можете создать отсоединенную ветвь в любое время, разветвив начальную фиксацию в репозитории, удалив ее дерево, добавив свое отсоединенное дерево, а затем выполнив git commit --amend.
Я знаю, что это не отвечает вопрос о том, как изменить ветвь по умолчанию в удаленном репозитории, но он дает чистый ответ о том, как создать отделенную ветвь.
во-первых, создайте новую ветвь, которую вы хотите установить по умолчанию, например:
$>git branch mainдалее, нажмите эту ветку на происхождения:
$>git push origin mainТеперь, когда вы входите в свою учетную запись GitHub, вы можете перейти в свой репозиторий и выбрать Настройки>ветвь по умолчанию и выбрать "main."
затем, если вы так решите, вы можете удалить главную ветвь:
$>git push origin :master
для людей gitolite, gitolite поддерживает команду под названием -- wait for it--
symbolic-ref. Он позволяет запускать эту команду удаленно, если у вас есть разрешение W (write) на репо.
просто войдите в свою учетную запись GitHub и на дальней правой стороне в меню навигации выберите настройки, в Настройки выбрать Ветка По Умолчанию и вернуться обратно на главную страницу вашего репозитория, который сделал трюк для меня.
Comments