2016-03-23 1 views
3

После клонирования git-хранилища с моего gitlab-сервера он не является контрольным мастером, поскольку origin/HEAD указывает на какой-либо другой «origin/foo» ветки. В gitlab ветвь по умолчанию установлена ​​в master.git clone - ветвь по умолчанию

Как перенести начало/HEAD из «origin/foo», чтобы указать на «origin/master», чтобы дополнительные клоны автоматически проверяли происхождение/мастер?

Сразу после клонирования, Git удаленного шоу происхождения государства:

HEAD branch: foo 

Git удаленного -r секунд, что:

origin/HEAD -> origin/foo 

Я хочу ветвь HEAD, чтобы указать освоить, хотя - внутри gitlab - ветвь по умолчанию уже настроена на мастеринг.

ответ

3

Это можно сделать только на стороне сервера. Для GitLab это делается в вашем проекте, Настройки (последний элемент на боковой панели слева), «Разделение по умолчанию» (третье текстовое поле).

Screenshot of GitLab Project Settings page

Видимо есть проблема в данный момент (март 2016), что означает, что ветвь по умолчанию сообщает GitLab не всегда совпадает с головой ветви, сообщенной git remote show origin. Установив ветку по умолчанию GitLab на что-либо еще, а затем вернув ее в master, она работала для @rralf.

+0

Uhm - как я уже сказал: ветка по умолчанию Gitlab уже установлена ​​в мастер – rralf

+0

Да - я знаю, она настроена на освоение! Я просто установил его на что-то еще и снова сбросил его. Я сейчас клонирую его, чтобы увидеть, работает ли он сейчас. – rralf

+0

Хорошо, изменив ветку по умолчанию gitlab и сбросив ее обратно, чтобы решить проблему. Может быть, вы могли бы добавить этот намек на свой ответ, тогда я приму это. Кажется, какая-то странная ошибка глубоко внутри gitlab ... – rralf

0

Для этого вопроса, вам нужно работать на удаленной стороне, я думаю. Делая что-то вроде:

git checkout главный.

, чтобы HEAD ссылался на мастер.

+0

Удаленная сторона голая git и на самом деле недоступна для сырых команд git, поскольку она размещена на gitlab.Я должен сделать некоторую магию на стороне клиента, а затем отправить эти обновления на удаленный. – rralf

+0

@rralf Что касается локального трюка, я могу только подумать о локальном псевдониме команды, т. Е. Установить псевдоним * clone -b master * в вашем .gitconfig и использовать этот псевдоним вместо исходной команды clone. – gzh

2

Помимо Paul Hicks' answer, стоит добавить, что если ваш клиентский git очень старый (то есть, предшествовав 1.8.5, хотя исправление также было перенесено на 1.8.4.3), оно может не выбрать правильное ветка в любом случае.

Проблема возникает, когда ссылка сервера HEAD разрешает идентификатор фиксации, который также является концом более чем одной веткой. Процесс clone, на этих старых версиях git, не может понять направление HEAD -> ... и вместо этого получает необработанный идентификатор фиксации, который разрешает HEAD. Он также получает идентификаторы фиксации для каждой ветви, а затем выбирает какую-либо ветвь, которая по сути является случайной, - которая имеет этот идентификатор фиксации.

Новые клиенты обсуждают передачу символьного стиля и каждый раз получают правильную ветку. Тем не менее, если вы застряли в старом, одно решение заключается в том, чтобы убедиться, что идентификатор, разрешаемый HEAD, связан только с одной ветвью. То есть для каждой другой ветви, которая соответствует, сделайте фиктивную фиксацию так, чтобы кончик этой ветки больше не был тем же ID.

(Это также не удается, если сервер слишком старый, поскольку эти старые серверы не принимают символическую возможность передачи на этапе переговоров, но, конечно же, GitLab не застрял в последнее десятилетие, как некоторые дистрибутивы Linux, которые мы выиграли 't CentOname, ах.)