FreeBSD 13 から git に代わったので git cherry-pick や git revert でカスタムが楽になった2021年03月06日 13時31分16秒

FreeBSD が 13.0-RELEASE 直前に Subversion から git に移行した。Subversion は中央集中管理型で、一元的に管理をするのに優れている。しかし、分散管理型の方が FreeBSD には都合が良かった。

最初に git に移ったときは、若干面倒だったが、一度環境が落ち着けば、git の方が色々と便利。FreeBSD 13.0-RELEASE のリリース準備も佳境に入っている。ちょこちょことバグがあるが、変更は releng/13.0 にいきなりされるわけではなく、main に入のが先だ。その後数日まってから MFC になる。また、git では削除された機能を手元で復帰する作業が簡単だ。

13-BETA で clang/llvm がリンクに失敗して困っている。main には修正が入ったが、releng/13.0 に入ってくるのは数日後だ。それを cherry-pick で先取りする。

cherry-pick をするには、main にある変更をまず、取ってくる必要がある。

% git remote -v
upstream        https://git.freebsd.org/src.git (fetch)
upstream        https://git.freebsd.org/src.git (push)
% git fetch upstream main
% git log upstream/main

commit 772c631af81abdb6d498d972bab79d04d3db16d0
Author: Dimitry Andric <dim@FreeBSD.org>
Date:   Fri Mar 5 21:06:05 2021 +0100

git log で特定の SHA 番号を探し、cherry-pick を行う。
% git branch
* (HEAD detached from d7c26a1f30a)
  main
  releng/13.0
% git cherry-pick -m 1 772c631af81abdb6d498d972bab79d04d3db16d0
Performing inexact rename detection: 100% (142113/142113), done.
[detached HEAD 25e66f7aab1] Add a few missed files to libclang_rt.profile-<ar
ch>.a
 Author: Dimitry Andric <dim@FreeBSD.org>
 Date: Fri Mar 5 21:06:05 2021 +0100
 1 file changed, 2 insertions(+)
これで、手元の環境は releng/13.0 を先取りしたわけだ。cherry-pick を行ったので、MFC された時に勝手に統合される。
% git log
commit 25e66f7aab1df74c9e0d09ccd062e8122551da63 (HEAD)
Author: Dimitry Andric <dim@FreeBSD.org>
Date:   Fri Mar 5 21:06:05 2021 +0100

    Add a few missed files to libclang_rt.profile-<arch>.a
   
    Otherwise, programs compiled with -fprofile-instr-generate will
    encounter undefined symbol errors during linking, for example
    __llvm_profile_counter_bias, lprofSetRuntimeCounterRelocation and a few
    others were missing from the profile library.
手元の git log にも表示される様になり、ld も追加オプションを渡しても問題なく行える様になった。

また、releng/13.0 が切られる前に pccard のコードが削除され始めてしまったが、こちらも簡単に git revert で手元だけ復元できた。

% git log
commit d69fe57214845a642018a0e81ada7972da626dbb
Author: uyota
Date:   Sat Feb 27 11:48:04 2021 -0500

    Revert "pccard: Remove ata(4) PC Card attachemnt"
   
    This reverts commit 31cafce9fdddcfe18299b32cebe5762e4054eb4f.
Subversion だと、復帰自体は簡単だが、長期的な個別管理が手元では難しいので、諦めていただろう変更だ。git になり、手元のパッチ群の管理が楽になった。

前回次回