是否可以为不同的项目使用不同的git配置

时间:2012-01-10 10:25:18

标签: git git-config

.gitconfig通常存储在user.home目录中。

我使用不同的身份来处理CompanyA的项目以及CompanyB的其他内容(主要是名称/电子邮件)。我如何才能拥有2种不同的git配置,以便我的签到不会使用名称/电子邮件?

12 个答案:

答案 0 :(得分:209)

git配置有3个级别;项目,全球和系统。

  • 项目:项目配置仅适用于当前项目,并存储在项目目录中的.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" 

正如您可能猜到的,项目会覆盖全局和全局覆盖系统。

答案 1 :(得分:190)

存储库的特定克隆中的.git/config文件是该克隆的本地文件。放置在那里的任何设置只会影响该特定项目的操作。

(默认情况下,git config会修改.git/config,而不是~/.gitconfig - 只有--global会修改后者。)

答案 2 :(得分:138)

从git版本2.13开始,git支持conditional configuration includes。在此示例中,我们在~/company_a目录中克隆了公司A的回购,在~/company_b中克隆了公司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

答案 3 :(得分:11)

我通过以下方式为我的电子邮件执行此操作:

data:[<mediatype>][;base64],<data>

然后,当我克隆一个新的工作项目时,我只需要运行git config --global alias.hobbyprofile 'config user.email "me@example.com"' ,它将被配置为使用该电子邮件。

答案 4 :(得分:9)

您还可以将环境变量GIT_CONFIG指向git config应使用的文件。使用GIT_CONFIG=~/.gitconfig-A git config key value操作指定的文件。

答案 5 :(得分:6)

感谢@ 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

答案 6 :(得分:3)

为明确起见,您还可以使用--local使用当前存储库配置文件

git config --local user.name "John Doe" 

答案 7 :(得分:1)

我在同一条船上。我写了一个小的bash脚本来管理它们。 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

答案 8 :(得分:0)

尝试Android resource linking failed error: attribute hasStickyHeaders not found. error: attribute isDrawingListUnderStickyHeader not found. error: failed linking file resources. 我的本地更改时出现错误。 git发出的错误消息是“请告诉我您是谁”,然后告诉我“运行git stashgit config --global user.email "you@example.com来设置您帐户的默认身份。”但是,您必须省略--global 才能仅在当前存储库中设置身份。

答案 9 :(得分:0)

另一种方法是使用direnv并在每个目录中分隔配置文件。例如:

.
├── companyA
│  ├── .envrc
│  └── .gitconfig
├── companyB
│  ├── .envrc
│  └── .gitconfig
└── personal
   ├── .envrc
   └── .gitconfig

每个.envrc应该包含以下内容:

export GIT_CONFIG=$(pwd)/.gitconfig

.gitconfig通常是带有所需值的gitconfig。

答案 10 :(得分:0)

您可以通过更改存储库特定的配置文件(即/path/to/repo/.git/config)来自定义项目的Git配置。顺便说一句,git config默认情况下会写入此文件:

cd /path/to/repo
git config user.name 'John Doe'  # sets user.name locally for the repo

我更喜欢为不同的项目创建单独的配置文件(例如,在~/.gitconfig.d/中),然后在存储库的配置文件中include创建它们:

cd /path/to/repo
git config include.path '~/.gitconfig.d/myproject.conf'

如果您需要在属于单个项目的多个存储库中使用相同的选项集,则此方法效果很好。您还可以设置外壳别名或自定义的Git命令来操作配置文件。

答案 11 :(得分:0)

执行以下步骤:

  1. 从系统中查找.gitconfig

    Windows的文件位置:“ C:\ Users $ {USER_NAME} .gitconfig”

    Linux的文件位置:“ / usr / local / git / etc / gitconfig”

  2. 打开.gitconfig文件,然后根据您的条件添加以下行

    def contact(request):
        if request.method == "POST":
          Contact.objects.create(**request.POST)
        return render(request,'contact.html')