何しろ、ドットファイルなどの設定ファイルはホームディレクトリに持つものなので、そのままSCMツールの管理下には置けない。SCM下にないファイルが大量に同居するのは気持ち悪く、管理上も不便だからだ。ここでは管理の都合上、RCSのようなファイル単位のSCMは除外している。
さて、設定ファイルというものは、どのホストでもその場でいじる必要がある。一方、SCM作業ディレクトリで内容整理や環境依存性除去のための修正を行ったり、他ホストでの変更を取り込むこともある。となると、任意の二つのファイルを比較し、手軽にマージできるツールが欠かせない。
もちろん、sdiff(1)
やEmacsのemerge-files
、その他さまざまなマージ支援ツールが存在する。しかし、一方のファイルが存在しない場合の対応や、マージ結果で片方を上書きする機能などを備えたラッパーがないと、反復的なマージ作業でうんざりしてしまう。一連の作業で上書きマージを行えるものが必要だ。
求められるのは、まさにFreeBSDのmergemaster(8)
のマージ支援機能。ということでシェルスクリプトimerge(1)を書いた。使い方は簡単で、元ファイルと先ファイルを指定するのみ。差分が表示され、元ファイルで先ファイルを上書きするか、内容をマージするか、何もしないかを選ぶ。マージを選択するとsdiff(1)
が起動し、hunkごとに手動マージができる。エディタも起動できるので困ることはないだろう。終了すると差分が表示され、先ファイルを置き換えるか、やり直すかを聞かれる。今のところ、いずれかがsymlinkのときは何もしない。
これで、すでにホームディレクトリにあるファイルを元ファイル、SCM作業ディレクトリにあるファイルを先ファイルとしてimergeすることで、編集結果をスムーズにSCMに取り込めるようになった。まずは一歩前進。