В книге Pro Gitнаписано

«происхождение» не является особенным

Точно так же, как имя ветки «master» не имеет особого значения в Git, как и «origin».Хотя «master» - это имя по умолчанию для начальной ветки при запуске git init, что является единственной причиной его широкого использования., «origin» - это имя по умолчанию для пульта дистанционного управления при запуске git clone. Если вместо этого вы запустите git clone -o booyah, тогда у вас будет booyah / master в качестве удаленной ветки по умолчанию.

Это означает, что мы можем использовать имя нашей ветки по умолчанию как main или main-branch или что-то в этом роде. Я не видел никакой опции в man git-init, которая инициализирует мой репо с другим именем ветки по умолчанию.

GitHub показывает, как установить имя ветки по умолчанию на своей странице настроек. Но я не говорю о том, как установить его на каком-то конкретном сайте хостинга Git. Я строго спрашиваю только о Git, а не о каком-либо конкретном сайте хостинга Git.

Есть способ сделать это?

Abhisek

Ответов: 5

Ответы (5)

Более новый Git, новый репозиторий

Начиная с версии git 2.28.0, команда git init теперь принимает параметр - initial-branch (или -b для краткости). Эти две команды создают новое репозиторий Git с веткой под названием «trunk», что всегда имело для меня больше смысла, чем «master» (мастер чего?):

git init --initial-branch=trunk
git init -b trunk

Это можно настроить с помощью параметра init.defaultBranch. Если я хочу, чтобы все новые репозитории имели «ствол» в качестве ветки по умолчанию:

git config --global init.defaultBranch trunk

старый Git, новый репо

В некоторых системах все еще установлены более старые версии Git. Мой сервер Debian 10 (Buster, текущая стабильная версия по состоянию на октябрь 2020 года) поставляется с Git 2.20, который не поддерживает параметр -b. Один из вариантов - создать репозиторий, а затем изменить имя ветки. Этот метод работает для обычных (не голых) репозиториев:

git init
git checkout -b trunk

Это создает новый репозиторий с trunk в качестве текущей ветки вместо master. Ветка master на самом деле не существует - ветки не создаются, пока в них не будет хотя бы одного коммита. Пока ветка не будет создана, ветка существует только в .git / HEAD, что объясняет, почему ветвь master исчезнет при переключении на trunk.

Открытые репо

Для голых репозиториев вы не можете запустить git checkout (вот что значит быть голым). Вместо этого вы можете изменить HEAD так, чтобы он указывал на другую ветку:

git init --bare
git symbolic-ref HEAD refs/heads/trunk

Old Repos

Если вы уже сделали коммит, вы можете вместо этого запустить git branch -m:

git init
touch file.txt
git add file.txt
git commit -m 'commit 1'
git branch -m trunk

Это переименовывает ветвь с master в trunk после ее создания.

Это кажется немного неуклюжим, поскольку механизм различается в зависимости от того, пуст ли репозиторий, но он работает. Вы также можете подойти к этому как «создание новой ветки и удаление master».

Поскольку Git 2.28 (выпущен 27 июля 2020 г.), вводится новый параметр конфигурации init.defaultBranch, который заменяет жестко запрограммированный термин master.

По умолчанию остается master!

Пользователь может изменить значение по умолчанию переменной конфигурации с помощью:

$ git config --global init.defaultBranch main

Прочтите главу git doc для получения дополнительных сведений Введение в init.defaultBranch

, если вы используете Azure Devops:

  1. В репо проекта выберите Ветви.

  2. На странице «Ветви» выберите «Дополнительные параметры» рядом с нужной новой ветвью по умолчанию и выберите «Установить как ветвь по умолчанию».

enter image description here

  1. После того, как вы установите новую ветку по умолчанию, вы можете удалить предыдущую ветку по умолчанию, если хотите.

Как я могу создать репозиторий Git с именем ветки по умолчанию, отличным от «master»?

Вы могли бы использовать Git 2.28 (3 квартал 2020 г.): имя основной ветки в существующих репозиториях и имя по умолчанию, используемое для первой ветки во вновь созданных репозиториях, можно настраивать, чтобы мы могли в конечном итоге отказаться от жестко запрограммированный 'master'.

и напоминание от авг. 2020 из GitHub:

1 октября 2020 г., если вы не изменили ветвь по умолчанию для новых репозиториев для вашего пользователя, организации или предприятия, она автоматически изменится с master на main.
Вы можете отказаться от этого изменения в любое время:

  • Для пользователей на странице https://github.com/settings/repositories
  • Для владельцев организаций на странице https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
  • Для администраторов предприятия на странице https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges

Это изменение - одно из многих изменений, которые GitHub вносит для поддержки проектов и сопровождающих, которые хотят переименовать свою ветку по умолчанию.
Чтобы узнать больше об изменениях, которые мы вносим, ​​см. github / renaming.

Но вернемся к самому Git: (2.28, Q3 2020) См. commit 508fd8e (29 июня 2020 г.) от Đoàn Trần Công Danh (sgn).
См. фиксация 0068f21, фиксация a471214, фиксация 0cc1b47, фиксация 32ba12d, фиксация 6069ecc, фиксация f0a96e8, commit 4d04658 (24 июня 2020 г.) и commit 489947c (23 июня 2020 г.) от Johannes Schindelin (dscho).
См. commit 8747ebb (24 июня 2020 г.) Don Goodman-Wilson (DEGoodmanWilson).
(объединено Junio ​​C Hamano - gitster - in commit 11cbda2, 06 июля 2020 г.)

init: позволяет указать начальное имя ветки для нового репозитория

Подпись: Йоханнес Шинделин

Растет число проектов и компаний, желающих изменить название основной ветки своих репозиториев (см., Например, твит Мислава Марохнича, чтобы узнать об этом).

Чтобы изменить это имя ветки для новых репозиториев, в настоящее время единственный способ сделать это автоматически - скопировать весь каталог шаблонов Git, а затем жестко закодировать желаемое имя ветки по умолчанию в .git / HEADфайл, а затем настроив init.templateDir, чтобы он указывал на эти скопированные файлы шаблонов.

Чтобы сделать этот процесс менее громоздким, давайте представим новую опцию: - initial-branch = .

git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo

И:

init: разрешить установку значения по умолчанию для исходного имени ветки через конфигурацию

Помощник: Йоханнес Шинделин
Помощник: Деррик Столи
Подписано: Дон Гудман-Уилсон

Мы только что ввели параметр командной строки - initial-branch = , чтобы разрешить инициализацию нового репозитория с начальной ветвью, отличной от жестко заданной.

Чтобы пользователи могли переопределить исходное имя ветки более постоянно (то есть без необходимости указывать имя вручную для каждого вызова git init), давайте представим init.defaultBranchнастройка конфигурации.

Примечание: commit 489947c, о сообщении о фиксации слияния, с тех пор было отменено в Git 2.29, см. «как я могу настроить сообщение git о фиксации слияния?».
Значение init.defaultBranch остается.


Это влияет на подмодули:

субмодуль: возврат к HEAD удаленного устройства при отсутствии удаленного ... ветки

Помощник: Филипп Блейн
Подпись: Йоханнес Шинделин

Когда remote. .branch не настроен, git submodule update в настоящее время возвращается к использованию имени ветки master.
Однако гораздо лучшая идея - использовать удаленный HEAD: на всех серверах Git, на которых запущены достаточно свежие версии Git, symref HEAD указывает на основную ветку.

Примечание: t7419 демонстрирует, что могут быть варианты использования, которые ожидают git submodule update --remote для обновления подмодулей на удаленную главную ветку, даже если удаленная HEAD указывает на другую ветку.
Возможно, этот патч делает поведение более интуитивным, но есть небольшая вероятность того, что это может вызвать регрессию в неясных настройках.

Тем не менее, это поведение можно исправить, не прибегая к более длительному переходному периоду:

  • Команда git submodule update --remote не очень распространена.
  • Текущее поведение Git при запуске этой команды совершенно сбивает с толку, если только текущая ветка удаленного репозитория не master (в этом случае предлагаемое поведение соответствует старому поведению).
  • Если пользователь сталкивается с регрессом из-за измененного поведения, исправление на самом деле тривиально: установка submodule. .branch на master восстановит старое поведение.

Обратите внимание, что с Git 2.29 (Q4 2020) тесты в contrib / скорректированы с учетом недавнего изменения в fmt-merge-msg.

См. commit b87528c (03 августа 2020 г.) Emily Shaffer (nasamuffin).
(объединено Junio ​​C Hamano - gitster - in commit 83b8250, 10 августа 2020 г.)

Вернуть "contrib: поддерево: настроить тест для изменения в fmt-merge-msg"

Подписано: Эмили Шаффер

Это возвращается commit 508fd8e8baf3e18ee40b2cf0b8899188a8506d07.

В 6e6029a8 (fmt-merge-msg: разрешить опускание места назначения слияния снова) мы возвращаем поведение, при котором слияние с 'master', по умолчанию, не включайте «в 'master'» в конце сообщения о слиянии. Это тестовое исправление больше не требуется.

Также:

В Git 2.29 (4 квартал 2020 г.) обновите тесты, чтобы отбрасывать из них слово «master».

См. фиксация f33f2d3, фиксация b6211b8 (26 сентября 2020 г.) и фиксация 432f5e6, фиксация 5a0c32b, фиксация 659288c (21 сентября 2020 г.) от Johannes Schindelin (dscho).
(Объединено Junio ​​C Hamano - gitster - in commit 58138d3, 05 октября 2020 г.)

тесты: избегайте вариаций master имени ветки

Подписано: Йоханнес Шинделин

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

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

Видя, что затронутые ветки имеют очень мало (если вообще что-либо) общего с ветвью по умолчанию, мы решили использовать полностью отдельную схему именования: topic_ (это не может быть topic - , потому что t5515 использует механизм test_oid с термином, и этот механизм внутренне использует переменные оболочки, имена которых не могут содержать дефисы).

Этот трюк был выполнен с помощью этого (GNU) вызова sed:

$ sed -i 's / master \ ([a-z0-9] \) / topic_ \ 1 / g' t / t * .sh

И все еще с Git 2.29:

См. commit 538228e, commit a15ad5d (8 октября 2020 г.) Johannes Schindelin (dscho).
(объединено Junio ​​C Hamano - gitster - in commit 62564ba, 8 октября 2020 г.)

t1415: избегайте использования main в качестве имени ссылки

Подписано: Йоханнес Шинделин

В рамках подготовки к серии патчей, которые изменят откат для init.defaultBranch на main, давайте не будем использовать main в качестве имени ссылки в этом тестовый скрипт.

В противном случае git for-each-ref ... | grep main(man), который хочет поймать эти ссылки, также неожиданно поймает refs / Heads / main.

Поскольку рассматриваемые ссылки являются локальными для рабочего дерева (т.е. каждое рабочее дерево имеет свое собственное, как и HEAD), и поскольку в тестовом примере уже используется вторичное рабочее дерево с именем "second", давайте вместо этого будем использовать имя"first".

При этом измените заголовки тестов, которые говорят о «репо», когда вместо этого означают «рабочее дерево».

Вы можете косвенно настроить git init на использование другой ветки по умолчанию: текущая ветка определяется HEAD, который является «просто» текстовым файлом, сообщающим Git, какой ref текущий.

Используя init.templateDir, вы можете попросить git init использовать другой:

# ~/.config/git/config or ~/.gitconfig
[init]
    templateDir = ~/.config/git/template/

и в ~ / .config / git / template / HEADпоместите одну строку (+ перенос строки): ref: refs / Heads / main (по умолчанию для ветки основной).

Все содержимое templateDir копируется в каталог .git при создании репозитория; значение по умолчанию (здесь / usr / share / git-core / templates) содержит несколько примеров хуков и других файлов, но вы можете использовать свой новый каталог шаблонов для установки хуков по умолчанию, например.

$ tree /usr/share/git-core/templates
/usr/share/git-core/templates
├── branches
├── description
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
└── info
    └── exclude

3 directories, 13 files

2022 WebDevInsider