NetBSDの9の終わりくらいにHEAD(trunk)をforkして自分の開発をコミットして時々本家をpullしていたのですが、10.99.6の後に大量にコンフリクトが発生してpullできなくなりました。
おそらくgcc12(前は10)が入ったタイミングでなにかがおかしくなったんだと思います。もともとNetBSDはgitはミラーでCVSでソースは管理しているのでときどきおかしくなるのかもしれません。
仕方ないので、いったんnetbsd-10ベースに戻すことにしました。これはHEADの方はgcc12になって、まだ問題があるかもしれないためです。わざわざ火中の栗を拾う必要はありません。
既存のファイルはいじって無くて、ほとんど新規のファイルなので、ファイルをコピーして再構築する事もできるのですが、せっかくなのでコミットの記録を残して移行します。
netbsd-10のブランチを用意します。
git remote add upstream https://github.com/NetBSD/src.git
git fetch upstream
git checkout -b netbsd-10 upstream/netbsd-10
元のブランチで自分のコミットの一覧を作ります。古いのが下になるので逆にします。
git log --author="Hiroki Mori" --pretty=format:%H > /tmp/id
tail -r /tmp/id > /tmp/id.rev
最終行に改行が無いため最初の行がつながっていて、手動で直しました。
これをnetbsd-10のブランチに適用します。
cat /tmp/id.rev | git cherry-pick --stdin
自分の修正ではなくて、HEADをpullしているコミットがエラーになるので、戻して抜いて再チャレンジを繰り返します。
git cherry-pick --abort
vi /tmp/id.rev
もっと頭のよいやり方がありそうですが。gitで複雑な事はしないようにしているのですが、いろいろ調べました。
ビルドするとobjディレクトリが残っていてエラーになるのでがっつんと消しました。
find . -type d -name obj -prune -exec rm -rf {} \;
問題ないようなのでgithubにアップしました。
git push origin netbsd-10
登りの帯域が細いのでけっこう時間がかかりました。
当日のトラフィックで9時くらいにブランチを用意して12時過ぎにpushしてます。
古いアーキテクチャの開発は、それに関係する部分は、ほとんどいじられなくなっていて、その開発ではコンフリクトを起こしにくいというメリットがあります。
10のリリースについてはここにページがありました。
本家の更新を取り込むのは以下のようにします。
git fetch upstream
git merge upstream/netbsd-10