Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
68
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Organization

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

.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管理に含めないといけない & ブランチ毎に設定ファイルの内容を変えないといけない、という場合にも使えると思います。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
68
Help us understand the problem. What are the problem?