С Git 2.23 (3 квартал 2019 г.) нет необходимости в хуке после оформления заказа, и вы можете официально использовать git config
условное включение без скрипта!
Механизм условного включения научился основывать выбор на ветке, на которой в данный момент находится HEAD.
См. commit 07b2c0e (05 июня 2019 г.) от Дентон Лю (Denton-L
).
(объединено Хунио С. Хамано -- gitster
-- в коммит 3707986, 09 июля 2019 г.)
config
: узнайте условие onbranch:
includeIf
В настоящее время, если пользователь хочет иметь индивидуальные настройки для каждой ветки, он должен вручную отслеживать настройки в своей голове и вручную устанавливать параметры в командной строке или изменять конфигурацию в каждой ветке.
Научите config условию onbranch:
includeIf
, чтобы оно могло условно включать файлы конфигурации, если ветвь, извлеченная в текущем рабочем дереве, соответствует заданному шаблону.
git config
man-страница теперь содержит:
onbranch
:
Данные, которые следуют за ключевым словом onbranch:
, считаются шаблоном со стандартными подстановочными знаками и двумя дополнительными, **/
и /**
, которые могут соответствовать нескольким компонентам пути.
Если мы находимся в рабочем дереве, где имя извлеченной в данный момент ветки соответствует шаблону, условие включения выполняется.
Если шаблон заканчивается на /
, автоматически добавляется **
.
Например, шаблон foo/
становится foo/**
.
Другими словами, он соответствует всем ветвям, начинающимся с foo/
. Это полезно, если ваши ветки организованы иерархически, и вы хотите применить конфигурацию ко всем ветвям в этой иерархии.
Итак, в вашем случае:
[includeIf "onbranch:gerrit"]
path=gerrit
И в файле .git/gerrit
:
[remote 'gerrit']
name = 'Personal Name'
Пример:
vonc@vonvb:~/gits/src/git$ git version
git version 2.23.0.b4
vonc@vonvb:~/gits/src/git$ git config includeIf.onbranch:next.path user1
vonc@vonvb:~/gits/src/git$ git config includeIf.onbranch:pu.path user2
vonc@vonvb:~/gits/src/git$ git config --local -l
core.repositoryformatversion=0
core.filemode=true
core.bare=false
...
includeif.onbranch:next.path=user1
includeif.onbranch:pu.path=user2
Установите файлы конфигурации для каждой ветки:
vonc@vonvb:~/gits/src/git$ git config --file=.git/user1 user.name user1
vonc@vonvb:~/gits/src/git$ git config --file=.git/user1 user.email [email protected]
vonc@vonvb:~/gits/src/git$ more .git/user1
[user]
name = user1
email = [email protected]
vonc@vonvb:~/gits/src/git$ git config --file=.git/user2 user.name user2
vonc@vonvb:~/gits/src/git$ git config --file=.git/user2 user.email [email protected]
vonc@vonvb:~/gits/src/git$ more .git/user2
[user]
name = user2
email = [email protected]
Проверьте, работает ли он!
vonc@vonvb:~/gits/src/git$ git config user.name
VonC
vonc@vonvb:~/gits/src/git$ git checkout next
Branch 'next' set up to track remote branch 'next' from 'origin'.
Switched to a new branch 'next'
vonc@vonvb:~/gits/src/git$ git config user.name
user1
vonc@vonvb:~/gits/src/git$ git checkout pu
Branch 'pu' set up to track remote branch 'pu' from 'origin'.
Switched to a new branch 'pu'
vonc@vonvb:~/gits/src/git$ git config user.name
user2
vonc@vonvb:~/gits/src/git$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
vonc@vonvb:~/gits/src/git$ git config user.name
VonC
От master
до next
и до pu
ответвлений: три разных user.name
! Один на ветку.
Никаких крючков. Нет сценария.
Как показано на Git 2.30 (1 квартал 2021 г.), обязательно используйте Git 2.24+, иначе вы можете получить странные сообщения об ошибках:
См. commit f1beaae (19 ноября 2020 г.) от Йоханнес Шинделин (dscho
).
(объединено Хунио С. Хамано -- gitster
-- в коммит 1242501 а>, 30 ноября 2020 г.)
t1309
: используйте нейтральное имя ветки в onbranch
тестовых примерах
Подписал: Йоханнес Шинделин
onbranch
тестовых случаев, затронутых этим патчем, на самом деле не пытаются включать какую-либо другую конфигурацию. Их цель — избежать регрессии двух ошибок в коде include.onbranch:<name>.path
, которые мы исправили в прошлом, ошибок, которые на самом деле не связаны с каким-либо конкретным именем ветки.
Первая ошибка была исправлена в 85fe0e800ca (config
: обход ошибки с includeif:onbranch и ранняя конфигурация, 31 июля 2019 г., Git v2.23.0-rc1 -- слияние ).
По сути, при чтении ранней конфигурации будет ловушка-22, пытающаяся получить доступ к ссылкам, и поэтому мы просто не можем оценить условие в этот момент. Тестовый пример гарантирует, что мы избежим появления этого фиктивного сообщения:
BUG: refs.c:1851: attempting to get main_ref_store outside of repository
Второй тестовый пример относится к сценарию без Git, где у нас просто нет текущей ветки для начала (потому что у нас вообще нет репозитория), а тестовый пример был представлен в 22932d9169f (config
: прекратите проверять, является ли the_repository
NULL
, 06.08.2019, Git v2.24.0-rc0 -- слияние, указанное в batch #2), чтобы гарантировать, что мы не вызовем ошибку сегментации, если код по-прежнему будет неправильно пытаться просмотреть любую ссылку.
Короче говоря, ни один из этих двух тестовых случаев никогда не будет смотреть на имя текущей ветки, даже в случае регрессии. Поэтому фактическое название ветки вообще не имеет значения. Поэтому мы можем легко избежать здесь названий веток с расовой подоплекой, и это то, что делает этот патч.
person
VonC
schedule
14.07.2019
.git/hooks/post-checkout
см. мой ответ ниже - person Moti Korets   schedule 14.04.2018