1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • jj コマンドをうっかり繰り返し入力すると サブコマンドエラー になるが、jj の設定エイリアスで吸収できる
  • 例では、現在編集中の changeset の短い ID を取得しようとして jj jj show -T 'change_id.short()' が失敗する状況を示している
  • jj は git のように設定ファイルで alias を定義でき、jj util exec で残りのコマンドを再び jj に渡せる
  • 単純なエイリアスでは -T が実行対象ではなく jj util exec のオプションとして解釈されるため、-- で引数の解析を打ち切る必要がある
  • 最終設定 jj = ["util", "exec", "--", "jj"] を使うと、jj jj show だけでなく何度も入れ子になった jj jj jj... show でも同じ changeset ID を出力する

繰り返し入力された jj がサブコマンドエラーで失敗する

  • jj の使用中にコマンドラインで jj をひとつ余計に入力すると、2つ目の jj がサブコマンドとして解釈されて失敗する
    • 例は、現在編集中の changeset の短い ID を取得しようとするコマンド
$ jj jj show -T 'change_id.short()'
error: unrecognized subcommand 'jj'
Usage: jj [OPTIONS] <COMMAND>
For more information, try '--help'.
  • シェルのエイリアスでも回避できるが、jj 自身の設定にある alias を使うこともできる
    • 設定の編集には jj config edit を使える
    • シェルから設定を変更するには jj config set を使える

jj util exec-- により引数の受け渡しを固定する

  • 最初の試みは、エイリアスで jj util exec を使って再び jj を実行する方法
[aliases]


# jj all the way down
jj = ["util", "exec", "jj"]
  • この設定では -T が実行対象の jj ではなく jj util exec のオプション として解釈されて失敗する
$ jj jj show -T 'change_id.short()'
error: unexpected argument '-T' found
tip: to pass '-T' as a value, use '-- -T'
Usage: jj util exec [OPTIONS] <COMMAND> [ARGS]...
For more information, try '--help'.
  • -- を入れると、それ以降のオプション解析を停止し、残りの引数をそのまま実行対象に渡せる
[aliases]


# jj all the way down
jj = ["util", "exec", "--", "jj"]
  • 最終設定後は、通常の jj show、入れ子になった jj jj show、さらに多く繰り返した jj jj jj ... show がすべて同じ短い changeset ID を出力する
$ jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx
$ jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj jj show -T 'change_id.short()'
upvqxuzzvxtx

1件のコメント

 
GN⁺ 3 시간 전
Lobste.rs の意見
  • 以前にも git git git git git があった

  • これはもっと単純な方法でも可能:

    [aliases]  
    jj = []  
    

    この形の唯一の欠点は、記憶が正しければ、jj jj のように他の引数なしで実行したときに、jj のようにデフォルトコマンドを実行しないこと

    • それなら、そのもっと単純な方法は実際には同じことをしているわけではないのでは?
  • わあ、ほぼ1年前(09/28/25)に JJ Discord に同じ解決策を投稿していた
    jj jj ... というタイプミスを jj ... のように動作させるには、実際にはこれが必要:

    [aliases]  
    jj = ["util", "exec", "--", "jj"]  
    

    実のところ、このやり方はかなり気に入っている

  • これって bunny party への参照?

  • 自分が管理している jj 設定 gist にも追加した: https://gist.github.com/pksunkara/622bc04242d402c4e43c7328234fd01c

  • それでも、Jujutsu とは何で、なぜ使うべきなのかを、ツイートの長さで5歳児に説明するようなまとめで見てみたい
    前職では Git を4年間毎日使っていて、本当に嫌いだった。自分たちに必要だったことや大半の使い方に比べて、奇妙なほど過度に複雑で、ほとんどの人にとっては分散バージョン管理システムではなく、Github 中心の中央集権的なサーバーベースのツールだった
    多くの Git ユーザーが、git にはイギリス英語で「怒りっぽく非協力的で役に立たない人」という意味もあることを知らないのは面白い。ツールとしての Git をよく表している言葉だ
    ただ、他のバージョン管理システムは使ったことがないので、比較には弱い。Jujutsu はググりにくいし、ドキュメントも自分のような人より、もっと熟練したバージョン管理ユーザー向けに書かれているように思える

    • Torvalds が git を選んだのは、実際に無礼で怒りっぽい人という意味があったからだと思う