git-wtを導入した

git-wt を導入したので、メモとして導入ログを記しておく。

github.com

導入動機

Agentic Coding によってにわかに脚光を浴びている git worktree だけれど、実際のところワークツリーディレクトリどこに置くの?といった話などちょっとした敷居がある。特に ghq ユーザーにとっては、ghq root (e.g, ~/src, ~/ghq) のディレクトリの直下にワークツリーを置くような運用だと、いかにも管理がしづらいのでどうするかという問題があった。

今回 songmu さんによる以下の神機能が入ったということで、個人的には git-wt が顧客が本当に求めていたものになったので導入することにした。

github.com

正直 ghq root 直下にリポジトリと並んでワークツリーディレクトリがあると、理由あってワークツリーディレクトリを削除する時にかなりハラハラすることになる。間違ったら .git ディレクトリごとリポジトリを消すことになるので壊滅的な打撃を被ることになる (手に汗握る) 。ワークツリーディレクトリが、リポジトリ配下の管理になるとリポジトリのルートディレクトリに移動して rm -rf .worktrees などすれば良いので、かなり精神的に楽。

じゃあ、リポジトリ配下にするとなるとそれはそれで一手間面倒だなというのがあったのを解決したのが上記の PR で、これは完全にアイデアの勝利というか、本当にありがとうございますというものだった。songmu さんはすごい人。

自分的にはこれでワークツリーディレクトリをどこに置くか問題に終止符が打たれたと思っていて、peco などの ghq root からのリポジトリ選択のフィルタリングツールにもワークツリーディレクトリが入らないし、いいことしかない。git-wt では、このような位置にワークツリーディレクトリのデフォルトを変更しようかという動きがあるので、意見のある人はコメントをしてみると良いと思う。

github.com

導入ログ

ghq + zsh + peco を使っている自分の設定手順を書いておく。なお、基本は git-wt の README に従えば、欲しい情報は記されていると思います。

インストール

むしろ安定版を選ぶ理由が現時点でなかったので、私は最新を取得しています。お好みで。

$ go install github.com/k1LoW/git-wt@latest

設定

まず、自分はワークツリーディレクトリは .worktrees という名前で~/.gitconfig へのグローバル設定することにした。リポジトリルート直下に置くワークツリーディレクトリ名は .wt というのも git-wt からの部分引用命名でそれっぽくあるものの、ぱっと見でわかりやすさを狙っている。コンフリクトしたらそのとき考える。なおこのあたりは上述のイシューが参考になると思う。

$ git config --global wt.basedir ".worktrees"

次に、~/.zshrc あるいはそこから読み込まれるファイルに以下を追加する。

eval "$(git wt --init zsh)"

最後に peco を使ったフィルタリングを wt コマンドとしてできるように以下も設定する。

wt() {
  git wt "$(git wt | tail -n +2 | peco | awk '{print $(NF-1)}')"
}

こんな感じで、git wt branch_name とすると良い感じに働くようになる。削除時は git wt -d branch_name あるいは git wt -D branch_name を使う。

Agentic Coding で並行作業する際に、同一リポジトリで作業が被った際に、git worktree の細々が面倒なので別のリポジトリの作業でもやっておくかという運用でカバーへの良いカウンターになった。

songmu さんがメンテナンスしている ghq と、k1LoW さんが作っている git-wt のコラボレーションは OSS のハートフルな相互作用で見ていて面白かったです。素敵なセンスの合作をありがとうございます!