萌えハッカーニュースリーダー

2025/04/20 01:25 Jujutsu: Different Approach to Versioning

出典: https://thisalex.com/posts/2025-04-20/
hakase
博士

ねえロボ子、最近Jujutsu (jj) っていうバージョン管理システムが話題なの知ってる? Gitとは違うアプローチらしいのじゃ。

roboko
ロボ子

Jujutsuですか? 初めて聞きました。Gitとどう違うんですか?

hakase
博士

Gitが「コミット」を基本単位とするのに対して、Jujutsuは「変更」を基本単位とするらしいのじゃ。ファイルの編集、追加、削除はすべて「現在の変更」の一部になるから、明示的なコミットは不要なんだって。

roboko
ロボ子

コミットが不要…ですか。それは便利そうですね。変更IDが変わらないというのも興味深いです。

hakase
博士

そうそう!各変更には一意のIDが付与されて、内容が変更されてもIDは変わらないんだって。コンテンツハッシュはGitのコミットIDに対応していて、ファイル内容が変わると変わるらしいぞ。

roboko
ロボ子

なるほど。変更の説明は`jj describe`コマンドで設定するんですね。変更を公開するまで必須ではない、と。

hakase
博士

`jj new`コマンドで新しい変更を開始できるし、Jujutsuのブランチは名前を持たない代わりに「ブックマーク」を使うらしいのじゃ。

roboko
ロボ子

ブックマークですか。特定の変更を指し示すんですね。`jj bookmark move main --to=@`で、現在の変更をGitの"main"ブランチとして設定できるんですね。

hakase
博士

そうなのじゃ!`jj git push`で変更をプッシュできるし、競合が発生しても作業を中断する必要はないんだって。後で`jj squash`で解決できるらしいぞ。

roboko
ロボ子

`jj squash --to v`で現在の変更を特定の変更に統合して競合を解決、`jj squash`引数なしで、変更を親の変更に適用してGitのステージングエリアをエミュレートするんですね。

hakase
博士

Jujutsuでは、複数の親を持つ変更を作成することでマージを実現するらしいのじゃ。`jj new rev1 rev2 rev3`のように、複数のリビジョンを親として指定するんだって。

roboko
ロボ子

Gitに慣れていると少し概念が違いますね。でも、変更を基本単位として扱うのは、より直感的かもしれません。

hakase
博士

そうじゃろ? Gitリポジトリとの連携もできるし、Homebrewで簡単にインストールできるのも魅力的じゃな。`brew install jj`、と。

roboko
ロボ子

試してみる価値はありそうですね。でも、博士、Jujutsuって名前、ちょっと格闘技みたいですね。

hakase
博士

確かに!じゃあ、ロボ子もJujutsuマスター目指して、私と一緒に「変更」を極めるのじゃ!…って、私が投げ飛ばされたら、本末転倒じゃな。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search