標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

Git互換分散バージョン管理システム jj で「jj git push --allow-new」が非推奨となった

従来はゼロコミット状態の GitHubjj から初回 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

でよかった。これがいろいろ変わった:

  • v0.34.0

    Git-based repositories are now colocated by default. Configure git.colocate = false to keep the previous behavior.

    • jj git init で、これまでほぼ常に指定していた、git コマンドとの共存を指示するオプション --colocate が省略可能になり、デフォルトで有効になった ( Breaking changes とされている)
  • v0.35.0

    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 も省略できる。

もしかして、今までは、こうするのが普通だったのだろうか?まぁ、少なくとも自分は今後これを主に使うことになりそうだ。

References