tech.guitarrapc.cóm

Technical updates

リポジトリの.gitignoreを触らず自分だけのファイルを無視したい

最近、.git/info/excludeを使う方法を紹介している記事を読みました。 実際、.ideaや自分だけの設定ファイルなどは、うっかりコミットしそうになりますよね。 とはいえ、リポジトリの.gitignoreを触るとチームメンバーに影響が出るため、触りたくないことも多いでしょう。

同じような動機ですが、私が普段使っている他の方法も紹介します。

はじめに

gitは無視したいファイルを.gitignoreに書くことで、Gitの管理対象から外せます。 しかし、.gitignoreはリポジトリごとに存在し、チームメンバー全員に影響を与えます。自分だけの無視設定を書きたい場合、リポジトリの.gitignoreを変更するのは避けたくなります。

今回は、リポジトリの.gitignoreを触らずに自分だけの無視設定を書く方法を4つ紹介します。

  • そのリポジトリだけでファイルを無視する
  • リポジトリに無視ファイル設定を置く
    • リポジトリの.gitignoreに無視するファイルを書く
    • グローバルの.gitignoreに、リポジトリごとの無視ファイルを書く <- おすすめ!
  • グローバルの.gitignoreに直接無視設定を書く

方法1. そのリポジトリだけでファイルを無視する

そのリポジトリでだけファイルを無視するなら、.git/info/excludeを使えば自分だけの無視設定ができます。

$ echo ".idea/" >> .git/info/exclude

.git/info/excludeはリポジトリごとに存在するため、他のリポジトリには影響しません。 また、.gitignoreと同じ書式で無視設定ができて使い勝手が良いです。

一方で、.git/info/excludeはリポジトリごとに存在するため、複数のリポジトリで同じ設定をしたい場合は、各リポジトリで設定することになります。 また、リポジトリをクローンしなおしたときに設定が消えてしまう1ため、その点は注意が必要です。

これらが嫌で私は余り使わないようにしています。

方法2. リポジトリに無視ファイル設定を置く

リポジトリに.gitignore.local(ファイル名は何でもいい)を置き、そこに自分だけの無視設定を書く方法もあります。 これは2つの方法があります。

2-1. リポジトリの.gitignoreに無視するファイルを書く

リポジトリの.gitignoreに、.gitignore.localを一度だけ書いてしまうのもいいでしょう。 チーム全員が「リポジトリで自分だけの無視ファイル設定は.gitignore.localに書く」というルールを敷くスタイルです。 初回だけリポジトリの.gitignoreを触る必要がありますが、その後は各自が.gitignore.localに自分だけの無視設定を書けます。

$ echo ".gitignore.local" >> .gitignore

こうすることで、チームメンバー全員が、各自.gitignore.localに自分だけの無視設定を書けます。

$ echo ".idea/" >> .gitignore.local

無視されているか確認します。

$ git check-ignore -v -- .gitignore.local
.gitignore:139:.gitignore.local .gitignore.local

いい感じですね。

2-2. グローバルの.gitignoreに、リポジトリごとの無視ファイルを書く

リポジトリの.gitignoreを触りたくない場合、グローバルgitignoreに.gitignore.localを指定しておく方法もあります。 これなら、リポジトリの.gitignoreを一切触らずに自分だけの無視設定ができます。私はこれが好きです。

グローバルgitignoreの設定は、XDG_CONFIG_HOMEを使っているなら$XDG_CONFIG_HOME/git/ignoregit config --global core.excludesFileデフォルト設定です。 このパスにファイルを置けばexcludesFileにパスを設定しなくても有効になります。

XDG_CONFIG_HOMEは、Linux/macOS/Windows共通で設定ファイルを配置する場所を示す環境変数です。通常は$HOME/.configに設定されています。

例えば、XDG_CONFIG_HOME$HOME/.configなら、$HOME/.config/git/ignoreになります。

$ env | grep XDG_CONFIG_HOME
XDG_CONFIG_HOME=/home/foobar/.config

$ echo ".gitignore.local" >> "$XDG_CONFIG_HOME/git/ignore"

これで、リポジトリに.gitignore.localを置けば自分だけの無視設定を書けます。

$ echo .idea/ >> .gitignore.local

無視されているか確認します。

$ git check-ignore -v -- .gitignore.local
/home/foobar/.config/git/ignore:2:.gitignore.local       .gitignore.local

いい感じですね。

方法3. グローバルgitignoreを使う方法

リポジトリごとに無視設定を書くのが面倒な場合、グローバルgitignoreに直接無視したいファイルを書いておく方法もあります。

このやり方は特定のリポジトリだけ例外にできないので、あまり好きではありませんが、OS固有のファイルなどを無視するのに便利です。 グローバルにignoreする内容はgithub/gitignoreにあるテンプレートを参考にすると良いです。便利。

以下は、私が使っているグローバルgitignoreの例です。

$ cat "$XDG_CONFIG_HOME/git/ignore"

# --- git ---
.gitignore.local

# Gibo
.gitignore-boilerplates
.gitconfig.local

# --- macOS ---

# General
.DS_Store
__MACOSX/
.AppleDouble
.LSOverride
Icon[]

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

# --- Windows ---

# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db

# Dump file
*.stackdump

# Folder config file
[Dd]esktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp

# Windows shortcuts
*.lnk

まとめ

リポジトリの.gitignoreを触らずに自分だけの無視設定を書く方法を4つ紹介しました。

方法 メリット デメリット
.git/info/exclude 設定が簡単 クローンしなおすと消える
.gitignore.local(リポジトリ) チーム全体で統一できる 一度だけ.gitignoreを触る必要がある
.gitignore.local(グローバル) リポジトリを一切触らない グローバル設定が必要
グローバルgitignore直接 OS固有ファイルに便利 例外設定ができない

リポジトリの.gitignoreは極力触りたくない場合、グローバルgitignoreにリポジトリごとの無視ファイルを指定する方法がおすすめです。

参考


  1. Unityプロジェクトだと、時々クローンしなおしたくなるのでありがちなんですよね