.gitconfig
は通常、user.home
ディレクトリに保存されます。
CompanyAのプロジェクトとCompanyBのプロジェクト(主に名前/電子メール)で作業するために、異なるIDを使用します。私のチェックインが名前/電子メールと一緒に行かないように、2つの異なるgit構成を使用するにはどうすればよいですか?
リポジトリの特定のクローンの.git/config
ファイルは、そのクローンに対してローカルです。そこに配置された設定は、その特定のプロジェクトのアクションにのみ影響します。
(デフォルトでは、git config
は.git/config
ではなく、~/.gitconfig
を変更します。--global
でのみ後者を変更します。)
Git configには3つのレベルがあります。プロジェクト、グローバルおよびシステム。
プロジェクト固有の構成を作成するには、プロジェクトのディレクトリでこれを実行する必要があります。
$ git config user.name "John Doe"
グローバル構成を作成します。
$ git config --global user.name "John Doe"
システム構成を作成します。
$ git config --system user.name "John Doe"
そして、ご想像のとおり、プロジェクトはグローバルをオーバーライドし、グローバルはシステムをオーバーライドします。
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]
私は私のメールに対して次の方法でこれを行っています:
git config --global alias.hobbyprofile 'config user.email "[email protected]"'
次に、新しい作業プロジェクトのクローンを作成するときに、git hobbyprofile
を実行するだけで、その電子メールを使用するように構成されます。
環境変数GIT_CONFIG
を、git config
が使用するファイルを指すようにすることもできます。 GIT_CONFIG=~/.gitconfig-A git config key value
を使用すると、指定されたファイルが操作されます。
ありがとう@ 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]
明示的にするには、--local
を使用して現在のリポジトリ設定ファイルを使用することもできます。
git config --local user.name "John Doe"
私は同じ船に乗っています。それらを管理するための小さな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 <[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
ローカルの変更をgit stash
しようとしたときにエラーが発生しました。 gitからのエラーは「あなたが誰であるか教えてください」と言ってから、「git config --global user.email "[email protected]
とgit config --global user.name "Your name"
を実行してアカウントのデフォルトIDを設定するように」と言いました。ただし、現在のリポジトリでのみIDを設定するには、Omit --globalを使用する必要があります。