標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Git互換バージョン管理システム jj の v0.23.0 がリリースされ、「jj split」のあの問題が直ってました

Git互換バージョン管理システム jj の v0.23.0 が出ました。あの不具合の修正は含まれているでしょうか?

「jj split」の差分エディターの表示が乱れる件:解決

Fixed bugs

Updated the built-in diff editor scm-record to version 0.4.0, which includes multiple fixes.

「内蔵の差分エディターの scm-record をバージョン 0.4.0 に上げた」とありますね。その内訳を見ると:

Fixed

(#37): Fixed redraw issues when rendering tabs and other non-printing characters.

「タブやその他の非印刷文字をレンダリングするときの再描画の問題を修正」(by機械翻訳)とあります。やったね

実際、バージョンアップ後、回避策の設定を外してみたところ、症状は再現しなくなりました。すばらしい。 (「君のレポジトリを領域展開 - 次世代バージョン管理システム Jujutsu の世界」の「不具合・トラブルシューティング」も更新しておきました:差分

一方、jj split には、もう一つ、そんな致命的ではないものの、ちょっとだけ面倒くさい問題がもう一つ残っています。

「jj split」で、1ファイルの完全削除を選択できない:未解決

$ jj st
Working copy changes:
D ahaha.txt
D hogehoge.txt
Working copy : umzqkvwk 4306b0ee (no description set)
Parent commit: tyktsytv 6d85643f TEST ALL

$ jj split

エディターが起動して、分割される前半のコミットログ登録を登録するが、ファイル名が列挙されていない

JJ: Enter a description for the first commit.

JJ: Lines starting with "JJ: " (like this one) will be removed.

コミットログとして、Remove ahaha.txt と入力して保存・終了すると

$ jj split
Hint: Using default editor ':builtin'; run `jj config set --user ui.diff-editor :builtin` to disable this message.
Warning: No changes have been selected, so the first commit will be empty
First part: umzqkvwk bb58fb86 (empty) Remove ahaha.txt
Second part: pxouuutu 9b49a166 (no description set)
Working copy now at: pxouuutu 9b49a166 (no description set)
Parent commit      : umzqkvwk bb58fb86 (empty) Remove ahaha.txt

$ jj log
@  pxouuutu iyahaya@nifty.com 2024-11-10 01:41:16 9b49a166
│  (no description set)
○  umzqkvwk iyahaya@nifty.com 2024-11-10 01:38:30 git_head() bb58fb86
│  (empty) Remove ahaha.txt
○  tyktsytv iyahaya@nifty.com 2024-11-10 01:31:22 6d85643f
│  TEST ALL

分割されたコミットは (empty) つまり無修正になってしまいます。つまり、やはり直っていません。

該当 Issueの 3702 もまだ Open のままでした(そっちを見た方が早いって)

まぁ、ファイルまるまる削除するというケースはあまり多くありませんし、回避するのも jj split (削除するファイル名) で実行するなりして差分エディターを起動しなければいいだけの話なので、それほど大きな問題でもないでしょう。まだしばらくの辛抱ですね。

その他の修正

自分も jj の全ての機能を使いこなせていないので、馴染みがある1点だけ:

  • The HEAD@git symbol no longer resolves to the Git HEAD revision. Use git_head() or @- revset expression instead. The git_head template keyword now returns a boolean.

「Git併用モード」のレポジトリの場合、リビジョンを指定する式で git から見た最新コミットを今まで HEAD@git という形で指定できましたが、それが廃止されるみたいです。

使うパターンとしては、GitHub へ push する前にブランチのヘッドを手動で移動させるときくらいでしょうか。今までは jj bookmark set master -r "HEAD@git" みたいな使い方が出来ましたが、かわりに "@-" 1git_head() という関数を使いましょう。

余談:v0.22 の時の書き洩らし

前回 v0.22のリリースのとき 、言及を忘れていたのですが、jj branch サブコマンドが非推奨になって、かわりに jj bookmark というサブコマンドを使うことになってました。

  • jj branch has been deprecated in favor of jj bookmark.

Rationale: Jujutsu's branches don't behave like Git branches, which a confused many newcomers, as they expected a similar behavior given the name. We've renamed them to "bookmarks" to match the actual behavior, as we think that describes them better, and they also behave similar to Mercurial's bookmarks.

機械翻訳+少し手直し)
  • jj branch は非推奨となり、jj bookmark が使用されます。

理論的根拠: Jujuku のブランチは Git のブランチのように動作しません。 名前から同様の動作を期待していたので、多くの新参者を混乱させました。 実際の動作に合わせて名前を「bookmark 」に変更しました。 これはそれらをよりよく説明しており、また Mercurial の bookmark と同様に動作します。

v0.23 になった今でも、まだちょっとなれなくて、たまに jj branch とか打ってしまいます。早く慣れなくちゃいけませんね


  1. 現在のコミット(@)の親(-)なので、厳密には HEAD@git とイコールではない