jj v0.43.0公開
(github.com/jj-vcs)- Git互換のバージョン管理システム jj v0.43.0 は、複数の変更セットを対象にコマンドを実行する
jj runを追加し、反復的な検証・修正作業をより自動化できるようにした jj runは変更セットごとに 専用の作業コピー を使用し、cargo checkやcargo fixのように作業コピーを変更するコマンドによる変更内容やコンフリクトも伝播する- 今回のリリースには、
git_head()、git_refs()、Git形式のシンボル解決、ui.revsets-use-glob-by-defaultの削除など、既存の設定・revsetの使い方に影響する変更が含まれる jj show --reversed、/etc/jj設定探索、jj config gc、jj gerrit upload -o、forks()revset関数、取り消し線のカラースタイルも追加された- Windowsのファイルidentity処理、不変な作業コピーのスナップショット、重複remote URL警告、Intel Raptor Lakeおよびaarch64での loose Git objectの破損問題が修正された
リリース概要
- jj はシンプルで強力なGit互換バージョン管理システムである
- v0.43.0では、複数の変更セットにコマンドを適用する
jj runが新たに追加された - 導入のためのインストール手順は installation instructions で確認できる
変更セットごとのコマンド実行: jj run
jj runは複数の変更セットを対象に同じコマンドを実行できる- 各変更セットは互いに分離された 専用の作業コピー を使用する
- 実行されたコマンドは作業コピーを更新でき、その結果として生じた変更内容やコンフリクトは適切に伝播される
- 使用例は次のとおり
jj run -- cargo check --all-featuresjj run -- cargo fix
互換性に影響する削除事項
- revsetとtemplateで非推奨だった
git_head()およびgit_refs()関数が削除された refs/heads/mainのようなGit形式のシンボルは、もはやリビジョンとして解決されない- 代わりにbookmark/tagの
<name>または<name>@<remote>構文を使う必要がある
- 代わりにbookmark/tagの
- 非推奨だった
ui.revsets-use-glob-by-defaultオプションも削除された jj bookmark trackおよびuntrackは<kind>:<bookmark>@<remote>パターンを今後サポートしない<bookmark>@<remote>シンボル構文は引き続きサポートされる- 関連issue: #9226
新機能
jj showが--reversedフラグをサポートしたjjが/etc/jjでも設定ファイルを探すようになったjj config gcは~/.config/jj/reposフォルダから削除または移動されたリポジトリの設定を整理する- 関連issue: #9362
jj gerrit uploadがgit push -oまたは--push-optionのように動作する-o/--optionフラグをサポートしたjj git fetchは、変更IDに基づいて書き換えられたリビジョンの子リビジョンをリベースする- 以前は、スタックにbookmarkが付いたリビジョンが複数ある場合、書き換えられたリビジョンとその子リビジョンが常にリベースされるとは限らなかった
- 不変な子リビジョン はリベースされない
forks()revset関数が追加された- 子が2つ以上あるすべてのコミットを返す
colors設定が{ crossed-out = true }による 取り消し線テキストスタイル をサポートした
修正された問題
- Windowsでパスのファイルidentityを取得する際、シンボリックリンクをたどらなくなった
- Unixの動作に合わせたもの
- 以前は、同じ対象にリンクされた2つのシンボリックリンクが同じファイルとして扱われていた
- このidentityチェックは、作業コピーを書き込む際に予約済みの
.gitおよび.jjディレクトリのaliasを検出するために使用される - 関連issue: #8924
- 作業コピーが不変状態だった場合、
jjはスナップショット中に新しいworking-copyリビジョンを生成する jj git remote addは、新しいremoteのfetch URLまたはeffective push URLが既存のremoteと完全に同じ場合に警告する- 関連issue: #413
- Intel Raptor Lake CPUとaarch64で 破損したloose Git object の問題が修正された
- 以前は
jjがコミット成功を報告しても、その後git fsckがincorrect data check、corrupt loose object、missing blobで失敗することがあった - その後の
jj操作もcorrupt deflate streamで失敗することがあった
- 以前は
1件のコメント
Lobste.rsの反応
jj runにはかなり期待しているjj bookmark track/untrack <name>@<remote>の廃止予定が撤回されたのはうれしい毎回
--remoteを打つのはずっとイマイチだったIntel Raptor Lake CPUとaarch64で破損した loose Git オブジェクトを修正したという部分は、興味深いバグのように聞こえる関連するブログ記事が出たら読んでみたい 😃
これまで見た破損した Git オブジェクトは、全部ファイルシステムのロールバックのせいだと思っていた
強制終了のあと、f2fs のロールバックがかなり興味深いディスク状態を作ることがあったが、単にそのあたりに壊れた箇所があったと分かってとても興味深い
jj runがjj fixとどう違うのか気になる変更ログの例でも
jj runでcargo fixを実行していたので、かなり重なっているように見えるjj runは作業コピー全体を作って、その中でコマンドを実行するjj fixは単一ファイルの内容をコマンドにパイプで渡し、その出力結果をそのファイルの新しい内容にするツールが
jj fixとうまく噛み合うなら、たいていフォーマッタやリンタのようなものだが、そちらのほうがずっと速い一方で、jj runのほうが柔軟だrunは各変更ごとにコマンドを実行し、fixは各変更ファイルにフィルタをかける私の場合は、
runでテストスイートを回して各コミットが有効かを確認し、そのあとfixでファイルにフォーマッタをかける、という使い方になるまだアップデートしていないので、これはあくまで私の解釈にすぎない
jj runは少し触ってみるつもりだが、私のdirenvの使い方のせいで、必要以上に厄介になる可能性が高いと思う