Як я можу створити сховище Git із назвою гілки за замовчуванням, відмінною від " master
"?
Ви скористаєтесь Git 2.28 (Q3 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 / перейменування .
Але повернемось до самого Git: (2.28, Q3 2020) Див. Коміт 508fd8e (29 червня 2020) від Đoàn Trần Công Danh ( sgn
) .
Див. Коміт 0068f21 , коміт a471214 , коміт 0cc1b47 , коміт 32ba12d , коміт 6069ecc , коміт f0a96e8 , коміт 4d04658 (24 червня 2020 р.) Та коміт 489947c (23 червня 2020 р.) Від Йоганнеса Шінделіна ( dscho
) .
Див. Коміт 8747ebb (24 червня 2020 р.) Дона Гудмана-Вільсона ( DEGoodmanWilson
) .
(Об’єднано Хуніо С Хамано - gitster
- вкоміт 11cbda2 , 06 липня 2020)
init
: дозволити вказати початкову назву гілки для нового сховища
Підписав: Йоганнес Шінделін
Зростає кількість проектів та компаній, які бажають змінити основну назву філії своїх сховищ (див., Наприклад , твіт Міслава Мароніча для довідки про це).
Щоб змінити цю назву гілки для нових сховищ, наразі єдиним способом зробити це автоматично є копіювання всього каталогу шаблонів Git, потім жорстке кодування бажаного імені гілки за замовчуванням у .git/HEAD
файл, а потім налаштування init.templateDir
вказувати на ці скопійовані файли шаблонів.
Щоб зробити цей процес набагато менш громіздким, давайте ввести новий варіант: --initial-branch=<branch-name>
.
git init --initial-branch=hello myLocalRepo
# or
git config --global init.defaultBranch hello
git init myLocalRepo
І:
init
: дозволити встановити за замовчуванням для початкового імені гілки через конфігурацію
Допомагав: Йоганнес Шінделін
Допомагав: Деррік Столі
Підписав: Дон Гудман-Вілсон
Щойно ми ввели параметр командного рядка, --initial-branch=<branch-name>
щоб дозволити ініціалізувати нове сховище з іншою початковою гілкою, ніж жорстко закодована.
Щоб дозволити користувачам постійно замінювати початкове ім'я гілки (тобто без необхідності вказувати ім'я вручну для кожного git init
виклику), давайте введемо init.defaultBranch
налаштування конфігурації.
Примітка: коміт 489947c , про повідомлення коміту злиття, з тих пір було скасовано в Git 2.29, див. " Як я можу налаштувати повідомлення коміту злиття git? ". Установка залишається.
init.defaultBranch
Це впливає на підмодулі:
submodule
: повернутися до ГОЛОВКИ пульта дистанційного керування за відсутнім пультом дистанційного відгалуження
Допоміг: Філіпп Блен
Підписав: Йоганнес Шінделін
Якщо remote.<name>.branch
не налаштовано, в git submodule update
даний час повертається до використання імені гілки master
.
Однак набагато кращою ідеєю є використання пульта дистанційного керування HEAD
: на всіх серверах Git, на яких запущені досить останні версії Git, symref HEAD
вказує на основну гілку.
Примітка: t7419 демонструє, що може бути випадки використання, які очікують git submodule update --remote
оновлення підмодулів до віддаленої master
гілки, навіть якщо віддалений HEAD
вказує на іншу гілку.
Можливо, цей патч робить поведінку більш інтуїтивно зрозумілою, але існує невелика ймовірність того, що це може спричинити регресії у незрозумілих настройках.
Незважаючи на це, слід виправити цю поведінку, не маючи нічого подібного до довшого перехідного періоду:
git submodule update --remote
Команда не дуже часто.
- Поточна поведінка Git під час запуску цієї команди відверто заплутує, якщо тільки поточна гілка віддаленого сховища не є
master
(у цьому випадку запропонована поведінка відповідає старій поведінці).
- Якщо користувач стикається з регресією через змінену поведінку, виправлення насправді є тривіальним: встановлення
submodule.<name>.branch
наmaster
відновить стару поведінку.
Зауважимо, що в Git 2.29 (Q4 2020) тести в contrib/
налаштовані на нещодавню зміну на fmt-merge-msg
.
Див. Коміт b87528c (03 серпня 2020 р.) Емілі Шаффер ( nasamuffin
) .
(Об’єднано Junio C Hamano - gitster
- у комітеті 83b8250 , 10 серпня 2020)
Revert "contrib
:: subtree
налаштувати тест для зміниfmt-merge-msg
"
Підписано: Емілі Шаффер
Це повертається коміт 508fd8e8baf3e18ee40b2cf0b8899188a8506d07 .
У 6e6029a8 ( fmt-merge-msg
: дозволити пункт злиття знову пропустити) ми повертаємо поведінку, коли злиття проти ' master
' за замовчуванням не включає "into 'master'
" в кінець повідомлення про злиття. Це тестове виправлення більше не потрібно.
Також:
За допомогою Git 2.29 (Q4 2020) оновіть тести, щоб залишити слово 'master
з них '.
Див. Коміт f33f2d3 , коміт b6211b8 (26 вересня 2020 р.) Та коміт 432f5e6 , коміт 5a0c32b , коміт 659288c (21 вересня 2020 р.) Йоганнес Шінделін ( dscho
) .
(Об’єднано Junio C Hamano - gitster
- у комітеті 58138d3 , 05 жовтня 2020)
tests
: уникайте варіацій назви master
гілки
Підписав: Йоганнес Шінделін
Цей термін master
має навантажену історію, яка служить постійним нагадуванням про расову несправедливість. Проект Git не бажає продовжувати це і вже почав уникати цього.
Набір тестів використовує варіанти цього імені для гілок, відмінних від стандартної. Окрім t3200, де ми щойно розглядали це в попередньому коміті, ці екземпляри можна перейменовувати автоматизовано, оскільки вони не вимагають жодних змін поза тестовим сценарієм, тому давайте зробимо це.
Побачивши, що торкнуті гілки мають дуже мало (якщо взагалі щось) спільного з гілкою за замовчуванням, ми вирішили використовувати абсолютно окрему схему іменування: topic_<number>
(це не може бути, topic-<number>
оскільки t5515 використовуєtest_oid
механізм із цим терміном, і що механізм використовує змінні оболонки всередині, імена яких не можуть містити тире).
Цей фокус було виконано за допомогою цього (GNU) виклику:
$ sed -i 's/master\([a-z0-9]\)/topic_\1/g' t/t*.sh
І, як і раніше з Git 2.29:
Див. Коміт 538228e , коміт a15ad5d (08 жовтня 2020 р.) Йоганнеса Шінделіна ( dscho
) .
(Об’єднано Junio C Hamano - gitster
- у комітеті 62564ba , 08 жовтня 2020)
t1415
: уникати використання main
в якості імені ref
Підписав: Йоганнес Шінделін
Готуючись до серії виправлень, яка змінить запас init.defaultBranch
на main
, давайте не використовуватимемо main
як ref в цьому тестовому сценарії.
В іншому випадку git for-each-ref ... | grep main
( людина ), яка хоче зловити цих прихильників, також несподівано піймає refs/heads/main
.
Оскільки розглянуті посилання є локальними для робочого дерева (тобто кожне робоче дерево має своє власне, так само, як і HEAD
), а оскільки в тестовому випадку вже використовується вторинне робоче дерево під назвою " second
", давайте first
замість цього використаємо ім'я " " для цих посилань.
Налаштовуючи тестові заголовки, які говорять про "репо", коли вони мали на увазі "робоче дерево".