74
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitAdvent Calendar 2015

Day 23

.gitignore ファイルをブランチごとに別の内容にする

Last updated at Posted at 2015-12-22

.gitignore ファイルに限らないのですが、ブランチごとに特定のファイルの内容を変えたく、その設定をしたメモ。

前提 (困っていたこと)

Web開発で、何人かで git 使ってコード管理しています。
で、ビルド後に生成される css, js, sourcemapファイルなどを git管理に含めていると、いちいちコンフリクトが起きまくって困る!!!!
という状況でした。

(そもそもビルド後のファイルを gitに含めなくていいのでは? って話になるのですが、開発サーバへのコード反映を git でさくっとやりたくてですね……。サーバ側でビルドできればいいんだけど、環境によっては簡単にはいかず。なので、git管理にビルド後の cssファイル等も含めておきたかったのです。)

どうするか

以下の方針でなんとかできないか?

  • 普段の開発用ブランチでは、ビルド後の生成ファイルは .gitignore で無視させる → コンフリクト起きない
  • デプロイ専用のブランチを作り、そこではビルド後のファイルも git管理する → git経由でサーバに転送できる

つまり、ブランチ別に .gitignore の設定を変えられれば、なんとかならないか。

どうやったか

.gitattributes ファイルの merge=ours 設定を使いました。

まず、 .git/config ファイルに以下の設定を記述。

[merge "ours"]
    name = "Keep ours merge"
    driver = true

次に .gitattributes ファイルに以下のように記述。

/.gitignore merge=ours

こう設定することで、マージ時に /.gitignore ファイルはマージ対象外となり、常に自分側のファイル内容をそのまま残すようになります。
つまり、ブランチごとに .gitignore の内容を別にすることができる!

こうなった

結果、作業はこんな流れに。

  • 開発ブランチではビルド後の生成ファイルは .gitignore で無視。(もちろんコンフリクトは起きない)
  • デプロイ時は、デプロイ用ブランチに内容をマージ。
  • デプロイ用ブランチでは .gitignore の内容を変えており、ビルド後のファイルは無視されない。なので add して commit する。
  • その内容を開発サーバにデプロイ。

以上

いまのところ、この方法でなんとかしています。
(もっと上手いやりかたあれば教えてください)

また、この merge=ours を使った方法は、やむを得ず環境設定ファイル等を git管理に含めないといけない & ブランチ毎に設定ファイルの内容を変えないといけない、という場合にも使えると思います。

参考

74
73
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
74
73

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?