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



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



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



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





  1. при клонировании РЕПО, там это,




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




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



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


795   10  

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).

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

Если у вас есть доступ к удаленному РЕПО из оболочки, просто зайдите в нее .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

    Ничего не найдено.