Возможно ли иметь другую конфигурацию git для разных проектов
.gitconfig
обычно сохраняется в каталоге user.home
.
Я использую другую идентификацию для работы над проектами для CompanyA и что-то еще для CompanyB (в первую очередь имя/адрес электронной почты). Как я могу иметь 2 разных конфигурации git, чтобы мои проверки не шли с именем/электронной почтой?
Ответы
Ответ 1
Файл .git/config
в конкретном клоне репозитория является локальным для этого клона. Любые установленные настройки влияют только на действия для этого конкретного проекта.
(По умолчанию git config
изменяет .git/config
, а не ~/.gitconfig
- только с помощью --global
он модифицирует последний.)
Ответ 2
Существует 3 уровня конфигурации git; проект, глобальный и системный.
- project. Конфигурации проекта доступны только для текущего проекта и хранятся в каталоге .git/config в каталоге проекта.
- глобальный. Глобальные конфигурации доступны для всех проектов для текущего пользователя и хранятся в ~/.gitconfig.
- система. Системные конфигурации доступны для всех пользователей/проектов и хранятся в файле /etc/gitconfig.
Создайте конфигурацию, специфичную для проекта, вы должны выполнить ее в каталоге проекта:
$ git config user.name "John Doe"
Создайте глобальную конфигурацию:
$ git config --global user.name "John Doe"
Создайте конфигурацию системы:
$ git config --system user.name "John Doe"
И, как вы можете догадаться, проект переопределяет глобальную и глобальную системы переопределений.
Ответ 3
Как и в git версии 2.13, git поддерживает условная конфигурация включает. В этом примере мы клонируем репозитории компании A в каталоге ~/company_a
и репозитории компании B в ~/company_b
.
В вашем .gitconfig
вы можете поместить что-то вроде этого.
[includeIf "gitdir:~/company_a/"]
path = .gitconfig-company_a
[includeIf "gitdir:~/company_b/"]
path = .gitconfig-company_b
Пример содержимого .gitconfig-company_a
[user]
name = John Smith
email = [email protected]
Пример содержимого .gitconfig-company_b
[user]
name = John Smith
email = [email protected]
Ответ 4
Я делаю это для своей электронной почты следующим образом:
git config --global alias.hobbyprofile 'config user.email "[email protected]"'
Затем, когда я клонирую новый рабочий проект, мне нужно запустить git hobbyprofile
, и он будет настроен на использование этого сообщения.
Ответ 5
Вы также можете указать переменную окружения GIT_CONFIG
на файл, который должен использовать git config
. С помощью GIT_CONFIG=~/.gitconfig-A git config key value
обрабатывается указанный файл.
Ответ 6
Чтобы быть явным, вы также можете использовать --local
чтобы использовать текущий файл конфигурации репозитория:
git config --local user.name "John Doe"
Ответ 7
Я в одной лодке. Я написал немного bash script, чтобы управлять ими.
https://github.com/thejeffreystone/setgit
#!/bin/bash
# setgit
#
# Script to manage multiple global gitconfigs
#
# To save your current .gitconfig to .gitconfig-this just run:
# setgit -s this
#
# To load .gitconfig-this to .gitconfig it run:
# setgit -f this
#
#
#
# Author: Jeffrey Stone <[email protected]>
usage(){
echo "$(basename $0) [-h] [-f name]"
echo ""
echo "where:"
echo " -h Show Help Text"
echo " -f Load the .gitconfig file based on option passed"
echo ""
exit 1
}
if [ $# -lt 1 ]
then
usage
exit
fi
while getopts ':hf:' option; do
case "$option" in
h) usage
exit
;;
f) echo "Loading .gitconfig from .gitconfig-$OPTARG"
cat ~/.gitconfig-$OPTARG > ~/.gitconfig
;;
*) printf "illegal option: '%s'\n" "$OPTARG" >&2
echo "$usage" >&2
exit 1
;;
esac
done
Ответ 8
Спасибо @crea1
Небольшой вариант:
Как написано на https://git-scm.com/docs/git-config#_includes:
"Если шаблон заканчивается символом /, ** будет добавлен автоматически. Например, шаблон foo/становится foo/**. Другими словами, он соответствует" foo "и всему внутри, рекурсивно".
Поэтому я использую в моем случае:
[user] # as default, personal needs
email = [email protected]
name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
path = .gitconfig-job
Поэтому, если каталог проекта находится в моем ~/wokspace/, пользовательские настройки по умолчанию заменяются на:
[user]
name = John Smith
email = [email protected]