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 になり、手元のパッチ群の管理が楽になった。

前回次回

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2021/03/06/9354107/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。