blog.anqou.net
rss
author
tags

Jujutsu(jj)の便利な設定

最近[1] Git の代わりに Jujutsujj コマンド[2]) を VCS として使うようにしています。 Git と違ってステージングが不要だったり、操作を jj undo で戻せたり、jj evolog で同一 change に対する編集履歴が見れたりと色々便利です。

Jujutsu の設定は(Git もそうですが)Home Manager で管理しています。いくらかの変遷を経て、現状は以下のような設定にしています:

jujutsu = {
  enable = true;
  settings = {
    user = {
      email = "[email protected]";
      name = "Ushitora Anqou";
    };
    aliases = {
      tug = ["bookmark" "move" "--from" "heads(::@- & bookmarks())" "--to" "@-"];
      lga = ["log" "-r" "::"];
    };
    template-aliases = {
      "format_short_signature(signature)" = "signature.name()";
    };
    ui = {
      default-command = ["st"];
    };
  };
};

エイリアスとして jj tugjj lga を設定しています。tug は Jujutsu ユーザーの間では 広く知られたもので、bookmark を直前の change に移動させます。 GitHub の PR 上で作業しているときに役に立ちます。例えば(既に remote にあって track されている)hoge ブランチ(bookmark)に一つコミットを追加して push したい場合は以下のように作業します:

$ jj new hoge
$ jj describe -m "hoge hoge"
(ここで作業する)
$ jj new
$ jj tug
$ jj git push

lga は、よく知られた git lga から名前をパクったもので、全ての change のログを出力します。デフォルトの jj log は不要な枝葉を省略して表示するので、その代わりとして使います。一時期は jujutsu.settings.revsets.log = "::"; と設定して jj log で常に jj lga 相当の動きをさせていたのですが、複数人で作業するような大きめのレポジトリだと表示が大量になってしまい見にくくなったので、別のコマンドに分けました。

template-aliases の設定は jj log でコミットした人の名前を表示させるためのものです。デフォルトではメールアドレスが表示されますが、わかりにくいので名前にしています。

ui.default-command には jj st を設定しています。これにより、とりあえず何も考えずに jj と打つと git status 相当の表示が出るので現状確認に便利です。

注釈

  1. 今年の 2 月 8 日から使っているらしいので、だいたい 4 ヶ月くらいは使ったことになります。

  2. この記事は NeoVim で書いているのですが、insert mode で jj と入力すると insert mode を抜けるように NeoVim を設定しています。そのせいで jj コマンドについて記述しようとすると insert mode を抜けてしまい、ストレスマッハです。