====== FreeBSDの/usr/srcをGitに移行する ======
2020年12月末にFreeBSDのソースコード管理がSubversionからGitへと移った。将来的に''/usr/src''の更新にもgitを使うことになると思われる。現状、Handbookの解説はsvnを使った方法のままだが、そのうち更新されるだろう。一足先にreleng/13.0を使いたいのでgitに移行してみた。
参考資料は↓このへん:
* [[https://bsdimp.blogspot.com/2020/10/freebsd-git-primer-for-users.html|Warner's Random Hacking Blog: FreeBSD Subversion to Git Migration: Pt 2 Primer for Users]]
* [[https://bsdimp.blogspot.com/2020/09/freebsd-subversion-to-git-migration.html|Warner's Random Hacking Blog: FreeBSD Subversion to Git Migration: Pt 1 Why?]]
* [[https://github.com/bsdimp/freebsd-git-docs|GitHub - bsdimp/freebsd-git-docs: Draft copies of the FreeBSD git transition documents]]
リポジトリは↓ここ:
* [[https://git.freebsd.org/src.git]]
* cgit.freebsd.orgにリダイレクトされるけど、cなしの方が公開ミラーという扱いっぽい。cなしURLを使っといたほうが良さそう?
以下の方法はオレオレ式で、FreeBSDプロジェクトの公式方法ではないので注意。
何はともあれgitをインストール。
# pkg install git
''/usr/src''の中身を消す。過去にmake worldしたことがある人は、オレオレカーネルコンフィグファイルとかがあると思うので間違って消さないよう気をつけて下さい。''.svn''フォルダの削除も忘れずに。
# cd /usr/src
# rm -rf * .*
Gitリポジトリからソースコードを取得する。
何もせずに取得(クローン)すると変更履歴をローカルに全て持つことになる。いち利用者としては過剰なので、''--depth''で取得範囲を制限する。同オプションを使うと、mainブランチ―FreeBSDで言うところのCURRENTしか取得されないので、''--no-single-branch''を加えて他のブランチ情報を取得するようにする。
# pwd
/usr/src
# git clone -o freebsd --depth 1 --no-single-branch https://git.freebsd.org/src.git .
なお、当方の環境では''/usr/src''が独立したZFSデータセットとなっており、中身を空にしても''.zfs''ディレクトリは常に存在する。Gitの「ディレクトリが空じゃないよ」エラーでクローンできなかったため、いったん''/usr/src/gitsrc''にクローンし中身を''/usr/src''に移す方法を採った。
# pwd
/usr/src
# git clone -o freebsd --depth 1 --no-single-branch https://git.freebsd.org/src.git gitsrc
# mv gitsrc/* .
# mv gitsrc/.* .
# rmdir gitsrc
クローン完了後、''git branch -r''でreleng/13.0などのブランチがだらら~と表示されればOK。
13.0-RELEASEブランチに切り替える。
# git checkout releng/13.0
実のところ特定ブランチだけなら、''-b''オプションで''git clone -o freebsd -b releng/13.0 --depth 1 https://git.freebsd.org/src.git /usr/src''とすれば良い。こっちの方がディスクの消費量も少ないし。
ただまぁ、どうせgit使うならブランチ情報込みで持っといた方が、今後13.1-RELEASEなどが出てきた時も''git pull''して''git checkout''するだけで良くなるので、面倒がないかなーと。
----
(2021-02-18 追記)
他のライブラリなどに依存しない、軽量gitクライアントとして[[https://www.freshports.org/net/gitup|net/gitup]]が用意されている。名前のとおり[[https://www.freshports.org/net/svnup/|net/svnup]]のGit版の位置づけっぽので、ソースコードのクローンしかできなさそう。
ソースコードを取ってくるだけなら、gitupを使った方が依存関係ができなくていいかも?