Возможно ли иметь разные конфигурации git для разных проектов? - PullRequest
223 голосов
/ 10 января 2012

.gitconfig обычно хранится в каталоге user.home.

Я использую другую идентификационную информацию для работы над проектами для CompanyA и чего-то еще для CompanyB (прежде всего имя / адрес электронной почты).Как я могу иметь 2 разные конфигурации git, чтобы мои проверки не сопровождались именем / адресом электронной почты?

Ответы [ 9 ]

219 голосов
/ 22 мая 2013

Есть 3 уровня git config;project, global и system.

  • project : Конфигурации проекта доступны только для текущего проекта и хранятся в .git / config в каталоге проекта.
  • global : Глобальные конфигурации доступны для всех проектов для текущего пользователя и хранятся в ~ / .gitconfig.
  • system : Системные конфигурации доступны для всех пользователей /проекты и хранятся в /etc/gitconfig.

Создайте конфигурацию, специфичную для проекта, вы должны выполнить ее в каталоге проекта:

$ git config user.name "John Doe" 

Создать глобальную конфигурацию:

$ git config --global user.name "John Doe"

Создайте конфигурацию системы:

$ git config --system user.name "John Doe" 

И, как вы можете догадаться, проект переопределяет глобальную и глобальную переопределения системы.

200 голосов
/ 10 января 2012

Файл .git/config в определенном клоне репозитория является локальным для этого клона. Любые параметры, размещенные там, влияют только на действия для этого конкретного проекта.

(По умолчанию git config изменяет .git/config, а не ~/.gitconfig - только с --global это изменяет последнее.)

147 голосов
/ 10 мая 2017

Начиная с 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 = john.smith@companya.net

Пример содержимого .gitconfig-company_b

[user]
name = John Smith
email = js@companyb.com
12 голосов
/ 16 октября 2016

Я делаю это для своей электронной почты следующим образом:

git config --global alias.hobbyprofile 'config user.email "me@example.com"'

Затем, когда я клонирую новый рабочий проект, мне нужно только запустить git hobbyprofile, и он будет настроен для использования этой электронной почты..

9 голосов
/ 10 января 2012

Вы также можете указать переменную окружения GIT_CONFIG на файл, который git config должен использовать.С GIT_CONFIG=~/.gitconfig-A git config key value указанным файлом манипулируют.

6 голосов
/ 10 января 2019

Спасибо @ crea1

Небольшой вариант:

Как написано на https://git -scm.com / docs / git-config # _includes :

Если рисунок заканчивается на /, автоматически добавляется **.Например, шаблон foo/ становится foo/**.Другими словами, это соответствует foo и всему внутри, рекурсивно.

Поэтому я использую в моем случае:

[user] # as default, personal needs
    email = myalias@personal-domain.fr
    name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
    path = .gitconfig-job

Так что если каталог проекта находится в моем ~/wokspace/, пользовательские настройки по умолчанию заменяются на:

[user]
name = John Smith
email = js@company.com
4 голосов
/ 26 октября 2018

Чтобы быть точным, вы также можете использовать --local, чтобы использовать текущий файл конфигурации хранилища :

git config --local user.name "John Doe" 
1 голос
/ 16 мая 2012

Я в одной лодке.Я написал небольшой скрипт для управления ими.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 <thejeffreystone@gmail.com>

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
0 голосов
/ 26 марта 2019

У меня была ошибка при попытке git stash локальных изменений. Ошибка от git гласила: «Пожалуйста, скажи мне, кто ты», а затем сказал мне: «Запустите git config --global user.email "you@example.com и git config --global user.name "Your name", чтобы установить личность учетной записи по умолчанию». Однако вы должны пропустить --global , чтобы установить идентичность только в вашем текущем хранилище.

...