ソフトウェア開発の世界では、誰がどのコードを書いたかを理解することは、コラボレーション、デバッグ、知識共有にとって非常に重要です。Gitの組み込みコマンド blame
が長らくこの目的のための定番ツールでしたが、新しいオープンソースのコマンドラインユーティリティ git-who
がコード所有権と貢献パターンについてより深い洞察を提供することで注目を集めています。
Git Blame と Git Who の違いを理解する
Git blameは多くの開発者によって広く誤解されてきました。あるコメンターが指摘するように、Git blamingは多くの人に誤解されています。それは「誰がやったか」ではなく、「どのコミットが原因か」を示すものであり、これは異なります。git blameはコードの各行を最後に変更したコミットを表示しますが、git-whoは異なるアプローチを取り、ファイルやディレクトリ全体の貢献パターンを分析し、コード所有権のより全体的な視点を提供します。
根本的な違いは、git blameが行ごとの帰属に焦点を当てているのに対し、git-whoはコードベースの特定の部分に最も大きく貢献した人を特定するという、より広い質問に答えるのに役立つということです。この区別は、多数の貢献者がいる大規模なコードベースで所有権の全体像を理解することが難しい場合に特に重要になります。
従来の Git Blame の問題点
従来のgit blameには、git-whoが解決しようとする制限があります。例えば、開発者が大規模なリファクタリング、コードの再フォーマット、ファイルの移動を行った場合、git blameはそれらの変更を行った人が元のコードを書いていなくても、すべての行をその人に帰属させます。
「'git blame'についてのより苛立たしいことの一つは、古いコードベースをクリーンアップするときに起こります:現在の仕事では、多くのファイルを移動し、リポジトリを結合し、コードを再フォーマットするなどの作業が必要でした。'git blame'や類似のツールでは、私がコードを書いていなくても、しばしば私の名前が表示されます。」
この問題は、真のコード所有権の理解が知識共有とメンテナンスに不可欠な大規模組織では特に深刻です。Git-whoは貢献パターンに対するさまざまな視点を提供し、これらの制限を克服するのに役立ちます。
機能と能力
Git-whoはコード所有権に関するさまざまな視点を提供するいくつかのサブコマンドを提供しています。log
サブコマンドは標準のgitツールよりも洞察力のあるファイルとコミット構造の要約を提供します。user
サブコマンドはファイルツリー内の特定のパスへの貢献を調査するのに役立ち、tag
サブコマンドは編集したファイル数に基づいて著者を識別します。
特に便利な機能の一つは、bug
サブコマンドによる貢献タイムラインの可視化で、これはプロジェクト貢献のタイムラインをソートするタスクのデータベースを生成します。これはプロジェクトが時間とともにどのように進化し、誰が異なる期間に異なるコンポーネントを担当してきたかを理解するのに非常に役立ちます。
このツールは著者、時間枠、その他のパラメータによるフィルタリングもサポートしており、さまざまなユースケースに柔軟に対応します。さらに、リポジトリごとにデータをキャッシュすることで、繰り返しのクエリのパフォーマンスを向上させています。
git-who のインストールオプション:
- コンパイル済みバイナリ: Releases セクションで入手可能
- パッケージマネージャー:
- Homebrew:
brew install onkarshirge/tap/git-who
- Homebrew:
- ソースから:
- Go、Make、および Go ツールチェーンが必要
go install github.com/sinclairtarget/git-who@latest
- Docker:
- ビルド:
docker build -t git-who .
- 実行:
docker run -it --rm -v "$(pwd):$(pwd)" -w "$(pwd)" onkarshirge/git-who
- ビルド:
主要なサブコマンド:
log
: ファイル/コミット構造を要約user
: ファイルツリーパスへの貢献を表示bug
: 貢献のタイムラインを生成tag
: 編集したファイル数に基づいて作者にタグ付け
Git エイリアスの設定:
[alias]
who = "!f(){ git-who \"$@\"; }; f"
wlog = "!f(){ git-who log \"$@\"; }; f"
![]() |
---|
git-who の機能に関連するコード構造と貢献者履歴を示す GitHub リポジトリのスクリーンショット |
コミュニティの反応と提案
開発者コミュニティはgit-whoに対して肯定的な反応を示し、多くのユーザーがその速度と洞察を評価しています。あるユーザーは、約18年前からある1,695人のコミッターと220,000以上のコミットを持つRailsコードベースに対して、git-whoが3秒未満で分析を完了したと報告しています。
ユーザーはまた、モジュールやファイルの事実上の所有者を示すためのblameベースの統計の追加、(.gitignoreの機能に似た)パターンベースの包含/除外のサポート、好みの設定を保存するための設定ファイルなど、潜在的な改善点も提案しています。
一部の開発者は、git-whoが貢献者によるコミット数の単純なカウントを提供する git shortlog -sn
のような既存のツールを補完すると指摘しています。しかし、あるコメンターが指摘したように、「コミット数は貢献を測定するのに非常に良い指標ではありません。合意されたコミットスタイルがあり、全員がそれを守る場合にのみ機能します。」
既存のワークフローとの統合
Git-whoは既存のGitワークフローに簡単に統合できます。このツールは Homebrew のようなパッケージマネージャーを通じてインストールするか、ソースからコンパイルすることができます。ユーザーは完全な git-who
構文の代わりに git who
や git wlog
などのコマンドを使用できるようにするGitエイリアスを設定することができます。
コンテナ化された環境で作業している場合、git-whoはホストマシンに直接インストールする必要なく、Dockerコンテナとして実行できます。この柔軟性により、さまざまな環境や異なるワークフロー設定の開発者がアクセスしやすくなっています。
開発チームがコード所有権と貢献パターンをより良く理解する方法を模索し続ける中、git-whoのようなツールはコードの著者性について考え、分析する方法の進化を表しています。単純な行ごとのblameを超えたより深い洞察を提供することで、git-whoはチームがコードベースをより良く理解し、より効果的にコラボレーションするのに役立ちます。
参照: git-who