経緯
僕はそこそこの規模の開発をするとき必ず今後の開発予定などを未来の自分向けにメモしておくmemo.txtを作成する。
この内容はリモートで管理する必要はなく、gitignoreしてもいい。
しかし、僕は複数のPCで作業することがあり、リモートを介して内容の同期を行うため、gitignoreしてしまうとmemo.txtの内容を共有できない。
一方で、ほかの開発者などがいる場合や不特定多数に公開している場合、masterブランチに自分向けのメモが転がっているのはよくない。
そこで、ブランチごとにmemo.txtの内容を別々にする方法を調べてみた。
使う機能
ブランチをマージするときに無視してもらえればいいので、競合が起きた時に自動的にどちらか一方のものを選択するGitの機能を使う。
以下、その設定方法を記した。
config
gitで管理しているフォルダ(以下作業フォルダ)には隠しフォルダ.gitがあり、その中にconfigファイルがある。
この中に以下の内容を追加する。
name = "Keep ours merge"
driver = true
.gitattributes
次に、.gitattributesファイルを作成する。
作成する場所はとりあえず作業フォルダにしておく。
(たぶん深いフォルダに入れるとgitignoreとかと同じ感じになるとおもう)
ここに以下の内容を書く。
ここでのmemo.txtは作業フォルダに直に置かれている場合で、例えばTestフォルダにあるmemo.txtを扱いたかったら
とすればいい。
ここまでで設定は完了だ。
意図的に競合を起こす
設定しただけではmasterブランチにメモの内容が公開されてしまうので意図的に競合を起こす必要がある。
memo.txtを作成したときにそれぞれのブランチでブランチ名などを書いてコミットして置くといいだろう。
マージしてみる
マージしたときに
Merge made by the 'recursive' strategy.
のようなメッセージが出たら成功だ。
注意点
最初に競合を起こすことを忘れがち。
.gitattributesのファイル指定するときに./などをつけるとうまくいかない。
configの内容はgit管理されないため個々のPCで行う必要がある。
GitHubでプルリクエストが来た時にGitHub上でマージしてしまうとオートマージが機能しないので、プルしてマージしてプッシュする必要がある。
(もしかしたらGitHub上のマージも設定できるかも……??)
参考