是否有可能为不同的项目有不同的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