основная ветка не удалена должным образом - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь переименовать мою master ветку в development:

git checkout -b development master
git push -u origin development
git branch -d master
git push --delete origin master
git remote prune origin

Работает нормально. Однако, если я попытаюсь клонировать свой репозиторий, я попаду в пустую папку и мне нужно будет сделать git checkout development.

Как установить development в качестве ветви по умолчанию при клонировании?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Чтобы добавить к ответу Шлейса , когда вы запускаете git clone с -b <branchname>, вы говорите своему Git, что делать на последнем шаге. Помните, что git clone <em>url</em> <em>dest</em> фактически является сокращением для этой последовательности шагов из шести шагов:

  1. mkdir <em>dest</em>, чтобы создать новый пустой каталог. Если вы пропустите аргумент dest, Git построит его на основе предоставленного вами url. (Если вы называете существующий каталог, он должен быть пустым.) Остальные операции будут выполняться в этом каталоге, как будто через cd <em>dest</em>, хотя это не влияет на вашу оболочку.

  2. git init: это создает новый пустой репозиторий - каталог .git - в противном случае пустой каталог.

  3. git remote add origin <em>url</em>: это добавляет удаленный сервер с именем origin,к конфигурации этого нового пустого хранилища. (Вы можете выбрать имя, отличное от origin, если хотите, с помощью опции -o до git clone.) Если вы использовали --single-branch, то в этот момент фактически проходит одна ветвь. (Я говорю «эффективно» только потому, что эта часть процесса встроена в саму команду git clone.)

  4. Установите любые дополнительные git config команды, которые вы указали в *Команда 1040 * (с добавлением опций -c после слова clone: -c опции до слово clone может применяться к процессу клонирования, но не устанавливается в клон).

  5. Запустите git fetch origin (или любое другое имя, которое вы выбрали). Это получает все коммиты, опубликованные по URL. Он также получает список имен веток и тегов (и других ссылок) из другого Git;эти имена веток становятся вашими именами remote-tracking , и на этом этапе эти имена тегов обычно также копируются в ваш репозиторий. 1

  6. Наконец, ваш Git выбирает какое-то имя ветки, чтобы, по сути, перейти к git checkout. Какую ветку Git собирается назвать git checkout? Ответ зависит от того, предоставили ли вы флаг -b.

Если вы предоставите -b foo, ваш Git попытается git checkout foo. Это зависит от существования origin/foo, созданного на шаге 5 из их Git's foo. Если вы предоставите -b master, ваш Git попытается git checkout master. Но если вы не предоставите любой -b, ваш Git спросит их Git, какую ветку они рекомендуют.

В этом случае происходит то, что их Git рекомендует master, или ничего не рекомендует. Мы не можем сказать, какой из этих случаев вы опубликовали, но это не имеет значения, потому что у них нет master. Если они рекомендуют вашему Git использовать свои master для создания master, это не получится: у них нет master. Если они вообще не дают никаких рекомендаций, ваш Git в качестве последней вещи будет считать, что он должен использовать master, и будет искать ваш origin/master как скопированный из их master, но у вас его не будет.

Итак, что бы ни происходило в этот момент, у вашего Git нет ветки для проверки. У вас до есть origin/development, как скопировано с их development. Таким образом, вы можете запустить git checkout development, который смотрит вокруг, видит, что у вас нет development, оглядывается еще раз, видит, что у вас do есть origin/development, и делает то, что вы хотели.

Как сделать разработку своей веткой по умолчанию при клонировании?

Вы можете попробовать их Git, чтобы порекомендовать это имя.

Чтобы сделать это традиционным способом (не GitHub-ish), войдите на сервер, перейдите к репозиторию --bare (где бы он ни находился) и выполните:

git symbolic-ref HEAD refs/heads/development

и теперь их Git рекомендует development.

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


1 Имя ветви или тега может существовать, только если существует идентификатор объекта, записанный в этом имени ветви или тега. Следовательно, если вы ограничили набор копируемых коммитов, возможно, вашему Git придется пропустить некоторые имена. Например, если один из их тегов, например v0.1, указывает на фиксацию, которую вы намеренно пропустили с помощью --single-branch и / или --shallow, у вас не будет этого тега. Если их ветвь debug указывает на какой-то коммит, который вы не взяли, потому что вы сказали --single-branch foo, у вас не может быть origin/debug. Обратите внимание, что --shallow подразумевает --single-branch.

0 голосов
/ 18 октября 2019

По умолчанию git будет хотеть использовать master, и большинство репо будет использовать эту ветку как "стабильную". Так что в общем случае вы хотели бы иметь такое поведение.

Однако в вашей команде git clone есть опция -b <branchname>, которая будет извлекать конкретную ветку или просто клонировать названную ветвь.

https://git -scm.com / docs / git-clone

Так что в вашем случае вы захотите изменить команду клонирования на git clone -b development <repo>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...