web-dev-qa-db-ja.com

プロジェクトごとに異なるgit configを使用することは可能ですか?

.gitconfigは通常、user.homeディレクトリに保存されます。

CompanyAのプロジェクトとCompanyBのプロジェクト(主に名前/電子メール)で作業するために、異なるIDを使用します。私のチェックインが名前/電子メールと一緒に行かないように、2つの異なるgit構成を使用するにはどうすればよいですか?

215
priya

リポジトリの特定のクローンの.git/configファイルは、そのクローンに対してローカルです。そこに配置された設定は、その特定のプロジェクトのアクションにのみ影響します。

(デフォルトでは、git config.git/configではなく、~/.gitconfigを変更します。--globalでのみ後者を変更します。)

192
Amber

Git configには3つのレベルがあります。プロジェクト、グローバルおよびシステム。

  • 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" 

そして、ご想像のとおり、プロジェクトはグローバルをオーバーライドし、グローバルはシステムをオーバーライドします。

213
sarigalin

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]
140
crea1

私は私のメールに対して次の方法でこれを行っています:

git config --global alias.hobbyprofile 'config user.email "[email protected]"'

次に、新しい作業プロジェクトのクローンを作成するときに、git hobbyprofileを実行するだけで、その電子メールを使用するように構成されます。

12
ivand58

環境変数GIT_CONFIGを、git configが使用するファイルを指すようにすることもできます。 GIT_CONFIG=~/.gitconfig-A git config key valueを使用すると、指定されたファイルが操作されます。

9
Stefan Näwe

ありがとう@ 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]
6
bcag2

明示的にするには、--localを使用して現在のリポジトリ設定ファイルを使用することもできます。

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

私は同じ船に乗っています。それらを管理するための小さな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
1
netizen24601

ローカルの変更をgit stashしようとしたときにエラーが発生しました。 gitからのエラーは「あなたが誰であるか教えてください」と言ってから、「git config --global user.email "[email protected]git config --global user.name "Your name"を実行してアカウントのデフォルトIDを設定するように」と言いました。ただし、現在のリポジトリでのみIDを設定するには、Omit --globalを使用する必要があります。

0
Erich Meissner