最近[1] Git の代わりに Jujutsu(jj コマンド[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 tug と jj 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 相当の表示が出るので現状確認に便利です。