ITSUKI.
技術757 文字2 分

Day 21|git の履歴 — 一行の変更から、設計の理由をたどる

#Codex#ソースコードリーディング#図解

この章しょうの答こたえ

blame で手掛てがかりを得えて、差分さぶんと周辺しゅうへんの変更へんこうから理由りゆうを読よむ。

現在げんざいのコードだけでは、なぜその条件じょうけんが必要ひつようなのか分わからないことがあります。履歴りれきを使つかうと、以前いぜんの不具合ふぐあいへの対処たいしょや、周辺しゅうへんの設計変更せっけいへんこうが見みえてきます。最後さいごに触ふれた commit と、不具合ふぐあいを導入どうにゅうした commit は分わけて考かんがえます。

01|図でつかむ

図21|git の履歴

履歴りれきは理由りゆうを探さがす手掛てがかり。最後さいごの編集者へんしゅうしゃや commit が、そのまま原因げんいんとは限かぎらない。

02|3つのポイントで理解する

1. blame で現在の行の来歴を見る

関数かんすうや行範囲ぎょうはんいを絞しぼり、関連かんれんする commit を確認かくにんします。整形せいけいや移動いどうが直近ちょっきんにある場合ばあい、その差分さぶんだけで原因げんいんと決きめず、さらに前まえへ進すすみます。

2. show で一行の周囲も読む

変更へんこうの前後ぜんご、同時どうじに追加ついかされたテスト、メッセージを一緒いっしょに確認かくにんします。隣となりの状態じょうたい管理かんりが変かわった結果けっかとして、その一行いちぎょうが必要ひつようになった可能性かのうせいがあります。

3. -S と -G を使い分ける

git log -S は指定してい文字列もじれつの出現しゅつげん数かずが変かわる変更へんこうを探さがします。-G は差分さぶんの行ぎょうが正規表現せいきひょうげんに一致いっちする変更へんこうを探さがします。関数かんすうの導入どうにゅうを探さがすのか、条件式じょうけんしきの変化へんかを探さがすのかで選えらびます。

03|ソースで確かめる

以下いかの検索けんさくは Codex リポジトリのルートで実行じっこうします。最初さいしょに対象たいしょう commit を記録きろくし、検索結果けんさくけっかから定義ていぎと呼び出よびだし元もとを一ひとつずつ開ひらいてください。

git blame -L '/restore_backtrack_prompt_after_branch_error/',+12 -- codex-rs/tui/src/app_backtrack.rs
git log -S'maybe_send_next_queued_input' -- codex-rs/tui/src
# 対象 commit を決めたら git show <commit> で差分を読む

読よむ入口いりぐち: codex-rs/tui/src/app_backtrack.rs 。リンク先さきは照合しょうごうに使つかった固定こてい commit のファイルです。手元てもとの版はんと異ことなる場合ばあいは、上うえの検索語けんさくごから探さがし直なおします。

小さく試す

気きになる関数かんすうを一ひとつ選えらび、現在げんざいの実装じっそう、直近ちょっきんの変更へんこう、導入時どうにゅうじの差分さぶんを順じゅんに見みます。

04|30秒で復習

  • blame は調査ちょうさの開始点かいしてん。
  • 差分さぶんは周辺しゅうへんの状態じょうたい変更へんこうと一緒いっしょに読よむ。
  • 文字列もじれつの増減ぞうげんと差分さぶんパターンを使い分つかいわける。

全ぜん30章しょうの目次もくじへ