是否有可能为不同的项目有不同的gitconfiguration

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

我使用不同的身份来处理公司A的项目和公司B的其他项目(主要是名称/电子邮件)。 我怎样才能拥有2种不同的gitconfiguration,以便我的签入不会使用名称/电子邮件?

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

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

有3个级别的gitconfiguration; 项目,全球和系统。

  • 项目 :项目configuration仅适用于当前项目,并存储在项目目录中的.git / config中。
  • 全局 :全局configuration可用于当前用户的所有项目,并存储在〜/ .gitconfig中。
  • 系统 :系统configuration可供所有用户/项目使用,并存储在/ etc / gitconfig中。

创build一个项目特定的configuration,你必须在项目的目录下执行它:

 $ git config user.name "John Doe" 

创build一个全局configuration:

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

创build一个系统configuration:

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

正如你所猜测的, 项目覆盖全球和全球覆盖系统。

从git版本2.13开始,git支持条件configuration 。 在这个例子中,我们克隆了公司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 

你也可以把环境variablesGIT_CONFIG指向一个git config应该使用的文件。 使用GIT_CONFIG=~/.gitconfig-A git config key value指定的文件被操纵。

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

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

然后,当我克隆一个新的工作项目,我只需要运行git hobbyprofile ,它将被configuration为使用该电子邮件。

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