従来はゼロコミット状態の GitHub へ jj から初回 push する場合
$ jj git init --colocate $ gh repo create --public 20251226 ✓ Created repository hymkor/20251226 on github.com https://github.com/hymkor/20251226 $ jj git remote add origin git@github.com:hymkor/20251226.git $ jj commit -m "初回コミットのログ" $ jj bookmark create master -r @- Created 1 bookmarks pointing to ormyzlwk 61595706 master | Add .gitattributes $ jj git push --allow-new
でよかった。これがいろいろ変わった:
-
Git-based repositories are now colocated by default. Configure git.colocate = false to keep the previous behavior.
jj git initで、これまでほぼ常に指定していた、git コマンドとの共存を指示するオプション--colocateが省略可能になり、デフォルトで有効になった ( Breaking changes とされている)
-
jj bookmark track can now associate new local bookmarks with remote. Tracked bookmarks can be pushed without --allow-new. #7072
jj bookmark trackはリモートレポジトリにローカルの新bookmark を関連付けできるようになった。- track された bookmark は
--allow-newなしで push することができる
--colocate が省略できるようになったのはよいが、初回に jj git push する時の --allow-new が非推奨となったのはとまどうところだ。次のような警告が出るようになってしまった。
$ jj git push --allow-new Warning: --allow-new is deprecated, track bookmarks manually or configure remotes.<name>.auto-track-bookmarks instead. Changes to push to origin: Add bookmark master to e77f6b7289bb
なぜ、こうすべきかについては #7072 で述べられているものの、話が長いこともあり、なかなか理解が難しい。リモート側に存在しない bookmark を track するとは?
理由はともかくとして、今後は次のような手順が推奨されるようだ。
$ jj bookmark track master@origin Started tracking 1 remote bookmarks. $ jj git push Changes to push to origin: Add bookmark master to 615957069b23
しかしながら、bookmark を create して、track して、ようやく push というのはステップ数がやや多い。たまにしか行わない「レポジトリを作成する」作業では、すぐ忘れてしまいそうだ。
思うに別に --named オプションでもいいのではないだろうか?
$ jj git init $ gh repo create --public 20251226 ✓ Created repository hymkor/20251226 on github.com https://github.com/hymkor/20251226 $ jj commit -m "初回コミット" $ jj git remote add origin git@github.com:hymkor/20251226.git $ jj git push --named master=@- Changes to push to origin: Add bookmark master to 47d0c5b9a7dd
jj git push --named BOOKMARK=REVSET はリモートレポジトリにローカルレポジトリの指定したコミットを先頭とする新bookmarkを作るサブコマンドだ。普段は PR 用のブランチを作成するためによく使うが、初回 push に使っても別にダメというわけではない。むしろ、こちらの方だと、jj bookmark create master も省略できる。
もしかして、今までは、こうするのが普通だったのだろうか?まぁ、少なくとも自分は今後これを主に使うことになりそうだ。