📚
.gitignoreはサブディレクトリに作ってもよい
.gitignore
はサブディレクトリに作ってもいいんです
ご存じでした??僕は知りませんでした!
説明
ちょっとわかりにくいと思いますので説明しますと、例えば以下のようなディレクトリ構造で、複数言語の開発を1つのgitリポジトリで行っていたとします。("モノリポ"って言うんでしょうか)
.
├── .git
├── README.md
├── api # GoでAPIなんかを作っている
│ ├── Dockerfile
│ ├── entity
│ │ └── ....
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── web # WebでUIを作っている
│ ├── Dockerfile
│ ├── ....
├── tools # Pythonでちょっとしたスクリプトなんか作っている
│ ├── ....
│ ├── ....
└── docker-compose.yml
こういうとき、VSCodeなんかでコーディングしているとルートディレクトリに.vscode
とかできて、それを無視するために同じ階層に.gitignore
を作って、リポジトリに含めたくないファイルなどを管理したりすると思います。
ところがそれぞれの実装ディレクトリは言語もバラバラ、お作法もバラバラなので、無視したいファイル群やルールがそれぞれ異なります。でもルートディレクトリにある.gitignore
にまとめて書こうとすると、
# VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
*.code-workspace
# Go - api以下に配置
/api/*.test
/api/*.out
# Web - web以下に配置
/web/vendor/
/web/node_modules/
....
このように、それぞれのサブディレクトリを意識しなければいけなくなって、可読性も低ければ再利用性も悪い、イマイチな.gitignore
ができあがってしまいます。
こんなときは、それぞれのサブディレクトリごとに.gitignore
を分けて作ってスッキリさせましょう。
最初のtreeに書き加えると、こんな感じです。
.
├── .git
├── README.md
├── api
│ ├── .gitignore <- ここに置く
│ ├── Dockerfile
│ ├── entity
│ │ └── ....
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── web
│ ├── .gitignore <- ここに置く
│ ├── Dockerfile
│ ├── ....
├── tools
│ ├── .gitignore <- ここに置く
│ ├── ....
│ ├── ....
├── .gitignore <- もちろんここにも置く
└── docker-compose.yml
こうすると、サブディレクトリを意識しなくてよくなったり、各.gitignore
に言語ごとのルールを閉じ込められるので別のリポジトリでも活用できたりして、良いことずくめです!
gitリポジトリはルートディレクトリ直下にあるので、勝手に.gitignore
も同じ階層に置かなきゃいけないと思い込んでいたんですが、そんなことはありませんでした。思い込みって怖いですね!
ではまた!
おまけ
言語や環境を入力すると、いい感じの.gitignoreを作ってくれます。便利!
Discussion