開発環境と本番環境では、どうしても差分が出る。
その差分への対処に頭を悩ませていたけど
他の情報を検索しているときに、素敵な記事を発見した♪
サボり屋の技術メモ:Gitで内容が異なるファイルをマージ対象から除外(無視)する設定
状況
開発環境で開発用に用意しているファイルを本番環境には入れたくない。
具体例
OpenPNE3 では、開発用に下記開発用ページが用意されている。
api_dev.php
mobile_frontend_dev.php
pc_backend_dev.php
pc_frontend_dev.php
これらは、開発環境では利用をするけど
本番環境に上がったらエライことになる。
対応策
Git の設定で何とかなりそう!
- 別ブランチ(develop から master など)へのマージの際に除外される
- 下記はそのまま利用できる
- develop ブランチでのコミット
- リモートへのプッシュ
- リモートから他へのマシンのプル
おおお、これぞ正しく探していた方法。
master 以外のブランチ
feature ブランチや release ブランチを新規作成するときは
マージではなくリセット?(コピー)なので、release ブランチへは入っちゃうのかも。
でも、そこから master へいけないはずだから、理論上は問題ないはず。
master と release
ただ、release は、できる限り master と同一性を保証したいので
今後の行方を見守らなければ。
手法
設定ファイル
- .gitglobal
- 各リポジトリの .git/config
いずれかに、記述。
内容
[merge "ours"]
name = "Keep ours merge"
driver = true
[merge “ours”] の config設定は固定です。特殊なマージエンジンを有効化しているらしい。
サボり屋の技術メモ:Gitで内容が異なるファイルをマージ対象から除外(無視)する設定
んむ。
まんま書くことにしよう。。。
SourceTree
内蔵 Git の場合
C:\Users\[user_name]\AppData\Local\Atlassian\SourceTree\git_local\mingw32\etc\gitconfig
こちらに記述することで設定可能。
.gitattributes
上記で設定した merge=ours という文字列を、マージしたくないファイル名の後に付ける。
ignore_target_file.txt merge=ours
書式
- .gitignore と真似る
- ファイル名
- .gitignore と真似る
- ファイル名
- フルパス
- .gitignore 同様、ワイルドカードを利用できる
結果
develop → master マージ
確かに、上記4ファイルは、develop には存在し、master には存在しない。
.gitattributes は、両ブランチに存在する。
やった~!
develop → origin/develop プッシュ
確かに、上記4ファイルは存在したまま。
ただ、develop ブランチでは、存在するのが当たり前なので
まだよくわからない。
変更するファイルじゃないしな~。
origin/develop → 他のマシンへのプル
無事に .gitattributes ファイルがプルされました。
ん~、こちらも問題があるかどうかは不明。