- jjはGit互換のバージョン管理システムで、匿名ブランチを推奨しているが、Gitリポジトリにpushするにはbookmark、つまりGitブランチ名が必要
- デフォルトの
jj git push --change xyz は push-xyz ブランチを作成し、change ID中心なのでCLIでは自然だが、GitHubの一覧では作業内容を思い出しにくい
git_push_bookmark テンプレートを変更し、説明の先頭行を slugify() で短いslugにして、その後ろに短いchange IDを付ける方式に改善できる
jj git push --change ozkspkuyzpwu は add-note-about-jj-bookmark-templates/ozkspkuyzpwu を作成し、読みやすさとリビジョンとの対応関係の両方を維持する
- 共有リポジトリでは
ddbeck/ のようなnamespaceを先頭に付けられるが、Gitブランチ名の規則は複雑で、無効な場合は手動でbookmarkを作成する必要がある
jjのGit push用ブランチ名を改善
jj(Jujutsu)はGit互換のバージョン管理システムであり、いくつかの理由から匿名ブランチの利用を想定し、推奨している
- Gitリポジトリへpushするときは匿名ブランチにも名前が必要で、
jjではこれをbookmark、Gitではbranchと呼ぶ
jj git push --change xyz は、IDが xyz のリビジョンをGitブランチ push-xyz としてpushする
- このデフォルトは、
jj CLIが頻繁に表示して利用するchange IDを強調するという点では自然だが、GitHubのWebサイトにあるブランチ一覧では push-xyz だけでは何の作業か思い出しにくい
設定変更の方法
[template-aliases]
"slugify(str)" = '''
truncate_end(
65,
str.first_line()
.replace(regex:'[^[[:alnum:]].]', '-')
.replace(regex:'-{2,}', '-')
.replace(regex:'\.{2,}', '.')
.replace(regex:'(^-+|-+$)', '')
.lower()
)
'''
[templates]
git_push_bookmark = 'slugify(description) ++ "/" ++ change_id.short()'
slugify() は変更説明の先頭行を使って短い slug 形式の名前を作り、末尾に短いchange IDを付ける
- たとえば
jj git push --change ozkspkuyzpwu を実行すると、add-note-about-jj-bookmark-templates/ozkspkuyzpwu が生成される
- この名前はより読みやすく、それでいて
jj CLIに表示されるリビジョンIDとの対応を保てる
- 他の人と共有するリポジトリにpushするなら、自分のブランチを別のnamespace配下に置くようテンプレートを変更できる
[templates]
git_push_bookmark = '"ddbeck/" ++ slugify(description) ++ "/" ++ change_id.short()'
- Gitブランチ名が常に安全である保証はない
- Gitの有効なブランチ名の規則は複雑で、テンプレートが無効な名前を作るとエラーになり、bookmarkを手動で作成しなければならない
1件のコメント
Lobste.rsの意見
コミットメッセージにメタデータを入れて活用する方法で、かなりうまく運用している
まず、コミット説明から trailer の値を簡単に取り出す
trailer_v(key)エイリアスを作り、nushellの push スクリプトでjj logを使ってticket/topic形式のブランチラベルを組み立てているたとえばコミットメッセージに
ticket:TKT-123、topic:stop-crashingを入れておけば、GitHub に push して"Create PR"ページを開くスクリプトがその値を使うGit trailers は説明文の中で一貫して使えるキー・バリュー保存領域として便利だが、現状では
revset言語から取り出して使うのが少し面倒コミットメッセージや変更内容をもとにブランチ名をスラッグ化するのは、ローカルのLLMが扱いやすい領域のように感じる
チームメンバーが
jjの自動生成ブランチ名について尋ねてきたことが何度かあった単発コミット用のブランチには、この方法の派生形を試してみるつもり
change-id ベースのブランチ名なら完璧だと思う。わざわざ変えたくない
これはひどいコードレビュー用ツールが要求するブランチ名にすぎず、タイトルではない
PR 作成を自動化するツールでも解決できるだろうが、この方法はシンプルでよい