В моем файле .zshrc
меня есть функция chpwd
которая устанавливает переменную среды GIT_CONFIG
на основе текущего пути.
Что-то вроде этого:
update_gitconfig() {
if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-A(/|$)')" != "" ]]
then
export GIT_CONFIG="$HOME/.gitconfig-A"
return
fi
if [[ "$(pwd | grep -Poe '^/home/user/repositories/user-B(/|$)')" != "" ]]
then
export GIT_CONFIG="$HOME/.gitconfig-B"
return
fi
export GIT_CONFIG="$HOME/.gitconfig-default"
}
update_gitconfig
chpwd_functions+=(update_gitconfig)
Если я запускаю git config --list
, он отображает ожидаемую конфигурацию в каждом каталоге:
- В
$HOME/repositories/user-A
отображаются параметры из$HOME/.gitconfig-A
. - В
$HOME/repositories/user-B
отображаются параметры из$HOME/.gitconfig-B
. - В другом месте он отображает настройки из
$HOME/.gitconfig-default
.
Проблема начинается, когда я запускаю git commit
; кажется, что не получить настройки:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'user@host.(none)')
Итак, вопрос в следующем:
Есть ли способ заставить git commit
получить информацию из файла $GIT_CONFIG
?
ПРИМЕЧАНИЕ: я знаю, что могу запустить команды git config
в chpwd
чтобы автоматически применять локальные настройки к каждому репозиторию, но я ищу более "элегантный" способ.