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

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

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

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

  1. При клонировании репо, вот это,

      

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

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

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

114 голосов | спросил JasonSmith 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 28 Sep 2009 09:42:57 +0400 2009, 09:42:57

10 ответов


0

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

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

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

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

git-symbolic-ref HEAD refs/head/published» не будет передано в удаленное хранилище)

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


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

  

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

     

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

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

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

  •   
  • HEAD ссылается на 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: правильный способ изменить Active Branch в пустом хранилище? ", git remote set-head не будет ничего менять в удаленном репо.

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

ответил VonC 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 28 Sep 2009 09:49:37 +0400 2009, 09:49:37
0

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

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

git remote set-head $REMOTE_NAME $BRANCH

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

git remote set-head origin develop

ответил jrhorn424 1 MaramSat, 01 Mar 2014 06:34:04 +04002014-03-01T06:34:04+04:0006 2014, 06:34:04
0

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

admin > Default Branch > (choose something)

Готово.

ответил srcspider 22 J0000006Europe/Moscow 2012, 10:30:47
0

См .: http: //www .kernel.org /паб /программное обеспечение /SCM /мерзавец /документы /ГИТ-символьно-ref.html

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

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

$ git symbolic-ref HEAD refs /heads /<имя ветви>

ответил mani-fresh 9 22010vEurope/Moscow11bEurope/MoscowTue, 09 Nov 2010 16:48:44 +0300 2010, 16:48:44
0

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

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

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

ответил imz -- Ivan Zakharyaschev 3 J0000006Europe/Moscow 2010, 05:08:25
0

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

ответил squeegee 3 +04002011-10-03T20:24:00+04:00312011bEurope/MoscowMon, 03 Oct 2011 20:24:00 +0400 2011, 20:24:00
0

Вы можете создать отдельную ветку 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) и отделим ее от master :

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

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

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

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

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

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

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

ответил kbro 22 J000000Thursday10 2010, 18:14:47
0

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

$>git branch main

Затем переместите эту ветку в origin :

$>git push origin main

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

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

$>git push origin :master

ответил 4mnes7y 21 FriEurope/Moscow2012-12-21T22:05:38+04:00Europe/Moscow12bEurope/MoscowFri, 21 Dec 2012 22:05:38 +0400 2012, 22:05:38
0

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

ответил sitaram 30 52012vEurope/Moscow11bEurope/MoscowFri, 30 Nov 2012 07:55:52 +0400 2012, 07:55:52
0

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

ответил Matija 27 Jpm1000000pmSun, 27 Jan 2013 22:44:34 +040013 2013, 22:44:34

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132