理系学生日記

おまえはいつまで学生気分なのか

毎回go.sumのconflictを解消するのがつらすぎるので、.gitattributesでunion merge driverを使うよう指定する

Golangのツールをチームで開発しているのですが、Merge Requestをmergeする度にgo.sumとのconflictが発生する。つらい。 実のところは「つらすぎる」というほどつらくはないのですが、毎回conflict markerの<<<<<<<を消していく作業で人生を浪費するのはつらい。

というわけで、暫定的に.gitattributesでunion merge driverを指定する運用をはじめてみました。

$ grep go.sum .gitattributes
go.sum merge=union

.gitattributesについてはここでも書いた。

理屈

テキスト系ファイルに対しGitで利用されるデフォルトのmerge driverはtextです。 このmerge driverでconflictが検出されると<<<<<<<>>>>>>>でconflictしている箇所を教えてくれます。

一方で、テキスト系ファイルに対するmerge driverにはunionという代替案があります。 これはunionという名前の通り、conflictが発生したときにconflict markerを残すのではなく、その発生箇所の和集合をとってくれるというドライバです。 つまり、mergeを人手で解消する必要がなくなります。ハッピー!

もちろん和集合で良いのかという問題はありつつも、go mod tidyしてればなんか良い感じになるんじゃない?と雑に考えております。

merge driverについての詳細はここらあたりをご参照ください。

仮運用

いくらかこれで仮運用してみて、問題なさそうであれば.gitattributesをリポジトリにコミットします。