Возможно ли иметь другую конфигурацию 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]