作業ディレクトリ毎にGitで除外する(gitignoreする)ファイルを切り替えたかったのですが、
結論から言うと「Conditional includes」を使うと実現することが出来ました。

Git の設定をリポジトリごとに自動で使い分ける | Articles | Riotz.works
https://riotz.works/articles/lulzneko/2019/06/08/automatically-swich-git-configuration-for-each-repository/

git-config - CONFIGURATION FILE - Conditional includes | git-scm.com
https://git-scm.com/docs/git-config#_conditional_includes

このエントリで扱うのは、次のようなディレクトリ構成では無く

  • repository_1
  • repository_2

次のようなディレクトリ構成で、work_dir_1/work_dir_2で切り替えたいケースです。

  • work_dir_1
    • repository_1
    • repository_2
  • work_dir2
    • repository_3
    • repository_4

背景

まず、この切り替えをやりたいと思った背景です。

IntelliJ IDEAをプロジェクト標準のIDEとして利用しているケースでは、
「.idea」をリポジトリに含めることが一般的ですが。
特に利用するIDEを定めていない場合は、「.idea」をリポジトリに含めないですし、
「.gitignore」にわざわざ「.idea」を書いたりもしません。

この時は、自身の作業PCに「.idea」を除外する指定を入れるとよいのですが、
IDEAを利用する/しないプロジェクトが混在していると厄介です。
リポジトリ単位で指定するのは面倒で、設定漏れも発生しやすいです。

設定方法

まず、動作確認用に、
以下のコマンドでディレクトリ構成とリポジトリを用意します。

mkdir -p ~/work_dir_1/repository_1/.idea
mkdir -p ~/work_dir_1/repository_2/.idea
mkdir -p ~/work_dir_2/repository_3/.idea
mkdir -p ~/work_dir_2/repository_4/.idea
cd ~/work_dir_1/repository_1 && git init && touch .idea/.gitkeep
cd ~/work_dir_1/repository_2 && git init && touch .idea/.gitkeep
cd ~/work_dir_2/repository_3 && git init && touch .idea/.gitkeep
cd ~/work_dir_2/repository_4 && git init && touch .idea/.gitkeep

repository_1, repository_3で、git statusすると、
.ideaがgitの管理対象になっていることを確認できます。

$ cd ~/work_dir_1/repository_1 && git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.idea/

nothing added to commit but untracked files present (use "git add" to track)

$ cd ~/work_dir_2/repository_3 && git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.idea/

nothing added to commit but untracked files present (use "git add" to track)

それでは、excludesfileを作って、
「Conditional includes」を設定します。

.ideaの除外を指定するために、
~/.config/git/ignore-dotideaを次のような内容で作成します。

.idea

「Conditional includes」でincludeする設定ファイルとして、
~/.gitconfig-work_dir_2を次のような内容で作成します。

[core]
  excludesfile = ~/.config/git/ignore-dotidea

~/.gitconfig を次のように編集します。

[includeIf "gitdir:~/work_dir_2/**"]
  path = ~/.gitconfig-work_dir_2

repository_1, repository_3,4で、git statusすると、
repository_3,4では、.ideaがgitの管理対象外になっていることを確認できます。

$ cd ~/work_dir_1/repository_1 && git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.idea/

nothing added to commit but untracked files present (use "git add" to track)

$ cd ~/work_dir_2/repository_3 && git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

$ cd ~/work_dir_2/repository_4 && git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

以上で、作業ディレクトリ毎の除外ファイル切り替えが出来ました。

「Conditional includes」使えば、
除外ファイル以外に、Gitのユーザ名・メールアドレスなども切り替えできますね。
gitconfigで設定出来る項目は、以下を参照ください。

git-config - CONFIGURATION FILE | git-scm.com
https://git-scm.com/docs/git-config#_configuration_file

参考

リポジトリ単位の指定でよい場合

リポジトリ単位の指定で良い場合は、
以下のようにgit config --localでの指定で十分です。

$ cd ~/work_dir_1/repository_2

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.idea/

nothing added to commit but untracked files present (use "git add" to track)

$ git config --local core.excludesfile ~/.config/git/ignore-dotidea

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)

ユーザ名・メールアドレスなどの変更のみでよい場合

ユーザ名・メールアドレスなど環境変数によって変更できる項目の場合は、
次のブログで紹介されている方法でも実現できます。

direnvと環境変数を使ってGitのユーザ名、メールアドレス、SSH KEYをリポジトリ毎に切り替える | ゲンゾウ用ポストイット
https://genzouw.com/entry/2021/08/04/153026/2750/

環境変数で指定できる項目は、次を参照ください。

10.8 Gitの内側 - 環境変数 | git-scm.com
https://git-scm.com/book/ja/v2/Git%E3%81%AE%E5%86%85%E5%81%B4-%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0

以上。