最初に説明抜きで結論を
CRuby のリポジトリを git で clone した working copy で以下を実行します。
git remote add ruby-trunk-changes https://github.com/nagachika/ruby.git git config --local remote.ruby-trunk-changes.fetch '+refs/notes/commits:refs/notes/ruby-trunk-changes' git config --local notes.displayRef '*' git fetch ruby-trunk-changes
git の使いかたにはいろいろ個人の好みがあったりとか既存の設定との相性があると思うので、よりこまかく設定したい人や背景を知りたい人は以下の説明も読んでみてください。
背景
毎日 CRuby のコミットのコメントを書く ruby trunk changes は、ご覧の通り現在ははてなブログで公開しています。しかしこのコメントのプライマリな保存先は、はてなブログの記事ではなく git notes という機能を利用して notes として保存されており、GitHub 上のわたしの fork である https://github.com/nagachika/ruby に push されています。
過去の経緯としてはまず k-tsj さんが ruby-trunk-changesをgitから参照する - 継続にっき(2011-12-12) に git notes としてコメントを閲覧する方法について紹介してくださり過去の記事も git notes の形式で保存したリポジトリを公開してくださいました。
この記事を拝見して ruby trunk changes の記事の保存形式として git notes をプライマリにしたいなと思って書いた記事が git notes をボトムアップから理解する - ruby trunk changes です。この頃にはメモを書くためのツールを Heroku にデプロイして PostgreSQL にメモを一時的に保存していましたが、永続化のためにはどこか別のストレージに置きたいと思っていたので git notes をその候補として、メモツールから直接 notes として push できないかなと考えて内部構造を調べたのが先の「git notes をボトムアップから理解する」です。
その後メモツールは何度かバージョンアップや移植を経て、いつからか忘れてしまいましたが現在では git notes をプライマリのストレージとするようになっています*1。
従って特定のコミットの ruby trunk changes のメモを閲覧するためには、はてなブログを検索するかわりに皆さんの手元の ruby のリポジトリで notes として閲覧することも可能です。稀にではありますが遠い過去のコメントを修正することがあり、その際にも修正されるのはまず git notes のコメントであり、はてなブログ上の記事の修正が漏れている可能性はあるのでこちらのほうがオリジナルデータと言えます*2。
しかし [ruby trunk changes git notes] とかで Google 検索しても先頭にヒットするのは先の k-tsj さんの記事やわたしの「ボトムアップから理解する」の記事だけであって、現時点で ruby trunk changes を git で閲覧するためにどうセットアップするのがいいかという情報はその時々に口承されているという状況であったので、記事を書いて検索結果にヒットするようにしようと思いました。
以下の説明には暗黙のうちに git の設定方法の選択や内部構造に依存する語彙などが含まれているのですが、その説明は割愛しています。詳しくはドキュメントや書籍を参照してください。 先に挙げた git notes をボトムアップから理解する - ruby trunk changes およびそこからリンクしている「Gitをボトムアップから理解する 」という翻訳記事も参考になると思います。
ruby trunk changes を含む notes のセットアップ
まず GitHub から https://github.com/ruby/ruby.git を clone します。既に手元に clone した working copy があれば不要です。
git clone https://github.com/ruby/ruby.git
手元の git では単に clone しただけでは notes の情報は fetch されません。しかしこれは git の設定に依存する可能性もあると思います。場合によっては ruby/ruby のリポジトリに存在している notes の情報が refs に追加されているかもしれません。
git notes サブコマンドのヘルプメッセージをみるとわかるように git notes サブコマンドは全て "--ref" というオプションをつけることができます。つまりひとつのリポジトリの変更履歴に異なる種類の notes をつけることができるようになっています。
このうち "refs/notes/commits" という ref (--ref オプションでは refs/notes/ の部分を省略して commtis と指定することもできます) が git notes サブコマンドがデフォルトで参照する ref です*3。
ruby trunk changes のプライマリストレージを notes に移行した時には ruby のリポジトリは notes 情報を利用していなかったのですが、その後 ChangeLog をリポジトリ内で管理するのをやめてリリースパッケージ作成時にコミットログから自動的に生成するように変更したため、コミットログの間違いを訂正するという目的で github.com/ruby/ruby の notes (より正確に言うと refs/notes/commits という git notes のデフォルトの ref)が利用されるようになっています。
従って ruby trunk changes を参照するための notes はこの ref とは別の名前にしておいたほうが無難です*4。
ここでは ruby-trunk-changes という名前の ref で fetch するようにするコマンドを示します。
git remote add ruby-trunk-changes https://github.com/nagachika/ruby.git git config --local remote.ruby-trunk-changes.fetch '+refs/notes/commits:refs/notes/ruby-trunk-changes'
以上の設定で ruby-trunk-changes という remote から git fetch すると git notes を取得するようになります。
git fetch ruby-trunk-changes
git notes --ref ruby-trunk-changes list
上記のコマンドで謎の hash 値が 2つ並んだ大量の出力が得られたら完了しています。
試しに 3.2.0 の開発開始を知らせる狼煙である Matz のコミットにつけたコメントを git notes show コマンドで閲覧してみます。
$ git notes --ref=ruby-trunk-changes show 81c248924daf387118de5b37b16e08a937df73a3 include/ruby/version.h の RUBY_API_VERSION_MINOR が 2 に更新されました。 開発版が 3.2.0 となりました。
このように表示されれば ruby trunk changes のコメントを git notes として取得できています。
あとはたまに git fetch ruby-trunk-changes を実行するとコメントが notes に追加されていきます。
git log で閲覧するための設定
git notes の情報が clone されたリポジトリ(working copy) に fetch されて git notes コマンドで閲覧できるようになりましたが、 git log や git show でコミットを閲覧する時にも notes をみることができると便利です。
以下の git config コマンドを実行すると自動的に全ての refs の notes がログと同時に表示されるようになります。ちなみに git config の場合の '*' のところのクオートは必要なので注意(ないと shell によってワイルドカードとしてファイル名に展開されてしまいます)。 '*' のかわりに ruby-trunk-changes だけにしてもいいのですが、将来的に別の notes を利用するようになった時にそれも表示できたほうがいいと思うのでワイルドカード指定を例示しています。
git config --local notes.displayRef '*'
ここではリポジトリの working copy 単位で設定しましたが、ホームディレクトリの ~/.gitconfig に設定して他のリポジトリでも git notes の情報を閲覧するようにすることもできるのでそのあたりはお好みに。
これにより git show コマンドでコミットログや差分と一緒に ruby trunk changes のコメントが表示されるようになったので、先ほどの Matz のコミットをみてみます。
→ git show 81c248924daf387118de5b37b16e08a937df73a3 commit 81c248924daf387118de5b37b16e08a937df73a3 Author: Yukihiro "Matz" Matsumoto <matz@ruby.or.jp> Date: Sat Dec 25 23:56:01 2021 +0900 Development of 3.1.0 started. Notes (ruby-trunk-changes): include/ruby/version.h の RUBY_API_VERSION_MINOR が 2 に更新されました。 開発版が 3.2.0 となりました。 diff --git a/include/ruby/version.h b/include/ruby/version.h index 104f78a0c6..f10b58f9c7 100644 --- a/include/ruby/version.h +++ b/include/ruby/version.h @@ -67,7 +67,7 @@ * Minor version. As of writing this version changes annually. Greater * version doesn't mean "better"; they just mean years passed. */ -#define RUBY_API_VERSION_MINOR 1 +#define RUBY_API_VERSION_MINOR 2 /** * Teeny version. This digit is kind of reserved these days. Kept 0 for the
コミットログで 3.1.0 とバージョン番号を間違っているのに惑わされずにちゃんと 3.2.0 とコメントできていることがわかりますね。
それではよい ruby 開発を。