gw

command module
v0.3.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2025 License: MIT Imports: 1 Imported by: 0

README

gw - Git Worktree Wrapper

Git worktree をシンプルに管理するための CLI ツール。

特徴

  • 📁 直感的なワークツリー作成(gw add feature/hoge../repo-feature-hoge/
  • 🔀 ブランチ名、サフィックス、ディレクトリ名の柔軟な指定
  • 🐙 GitHub PR からのワークツリー作成
  • 🔍 fzf によるインタラクティブなワークツリー選択
  • 🚀 シェル統合によるスムーズなディレクトリ移動

インストール

Homebrew (macOS/Linux)
brew install t98o84/tap/gw
Go
go install github.com/t98o84/gw@latest
バイナリ

Releases からダウンロード。

ソースからビルド
# リポジトリをクローン
git clone https://github.com/t98o84/gw.git
cd gw

# Docker でビルド (macOS Apple Silicon)
docker compose run --rm dev sh -c "CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o gw ."

# Docker でビルド (macOS Intel)
docker compose run --rm dev sh -c "CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o gw ."

# Docker でビルド (Linux)
docker compose run --rm dev go build -o gw .

# パスの通った場所にコピー
sudo cp gw /usr/local/bin/
# または
mkdir -p ~/.local/bin && cp gw ~/.local/bin/

ローカルに Go がインストールされている場合:

go install github.com/t98o84/gw@latest

シェル統合のセットアップ

gw sw でディレクトリ移動するために、シェル設定に以下を追加してください:

Bash
# ~/.bashrc に追加
eval "$(gw init bash)"
Zsh
# ~/.zshrc に追加
eval "$(gw init zsh)"
Fish
# ~/.config/fish/config.fish に追加
gw init fish | source

使い方

設定ファイル

gw は YAML 形式の設定ファイルをサポートしています。設定ファイルのパスは以下の通りです:

  • Linux/macOS: ~/.config/gw/config.yaml (または $XDG_CONFIG_HOME/gw/config.yaml)
  • Windows: %APPDATA%\gw\config.yaml
設定例
add:
  open: true  # ワークツリー作成後に自動的にエディターで開く
  sync: false  # メインワークツリーからファイルを同期する
  sync_ignored: false  # gitignored ファイルも同期する
rm:
  branch: false  # ワークツリー削除時にブランチも削除する
  force: false  # 確認プロンプトをスキップする
close:
  force: false  # 確認プロンプトをスキップする
editor: code  # 使用するエディターコマンド
設定項目
  • add.open (boolean): ワークツリー作成後に自動的にエディターで開くかどうか(デフォルト: false
  • add.sync (boolean): メインワークツリーからファイルを同期するかどうか(デフォルト: false
  • add.sync_ignored (boolean): gitignored ファイルも同期するかどうか(デフォルト: false
  • rm.branch (boolean): ワークツリー削除時に関連するブランチも削除するかどうか(デフォルト: false
  • rm.force (boolean): 削除時の確認プロンプトをスキップするかどうか(デフォルト: false
  • close.force (boolean): 閉じるときの確認プロンプトをスキップするかどうか(デフォルト: false
  • editor (string): 使用するエディターコマンド(例: code, vim, emacs

注意: フラグの優先順位は以下の通りです:--no-* フラグ > 通常フラグ > 設定ファイル

--no-* フラグについて

設定ファイルで有効化したオプションをコマンド実行時に無効化できます:

  • --no-open: add.open=true でも開かない
  • --no-sync: add.sync=true でも同期しない
  • --no-sync-ignored: add.sync_ignored=true でも gitignored ファイルを同期しない
  • --no-yes / --no-force: close.force=true または rm.force=true でも確認プロンプトを表示
  • --no-branch: rm.branch=true でもブランチを削除しない
# 例: config で add.open=true でも開かない
gw add --no-open feature/hoge

# 例: config で rm.branch=true でもブランチを残す
gw rm --no-branch feature/hoge
ワークツリーの作成
# 既存ブランチのワークツリーを作成
gw add feature/hoge
# => ../ex-repo-feature-hoge/ が作成される

# 新規ブランチを作成してワークツリーを作成
gw add -b feature/new

# PR のブランチからワークツリーを作成
gw add --pr 123
gw add -p 123
gw add --pr https://github.com/owner/repo/pull/123
gw add -p https://github.com/owner/repo/pull/123

# ワークツリー作成後にエディターで開く(コマンドラインフラグ)
gw add --open --editor code feature/hoge
gw add --open -e vim feature/hoge

# 設定ファイルで add.open=true と editor=code を設定している場合
# フラグなしでもエディターが自動的に開く
gw add feature/hoge

# 設定ファイルで add.open=true でも開かない(--no-open フラグ)
gw add --no-open feature/hoge

# オプションの組み合わせも可能
gw add -b --open --editor code feature/new
gw add --pr 123 --open -e vim
ワークツリー一覧
gw ls
# 出力形式: <ディレクトリ名>\t<ブランチ名>\t<コミットハッシュ>\t<メインマーカー>
# ex-repo	main	a1b2c3d	(main)
# ex-repo-feature-hoge	feature/hoge	b4e5f6c
# ex-repo-fix-foo	fix/foo	c7d8e9f

# フルパスのみ出力
gw ls -p
# /path/to/ex-repo
# /path/to/ex-repo-feature-hoge
# /path/to/ex-repo-fix-foo
ワークツリーの削除
# 以下はすべて同じワークツリーを指定
gw rm feature/hoge
gw rm feature-hoge
gw rm ex-repo-feature-hoge

# 複数のワークツリーを一度に削除
gw rm feature/hoge feature/fuga fix/foo

# ブランチも一緒に削除(-b/--branch オプション)
gw rm -b feature/hoge
gw rm --branch feature-hoge

# 強制削除(マージされていないブランチも削除)
gw rm -f -b feature/hoge

# 引数なしで fzf でインタラクティブに選択(Tab で複数選択可能)
gw rm

注意: ブランチ削除には以下の安全性チェックが適用されます:

  • main または master ブランチは削除できません
  • カレントブランチは削除できません
  • マージされていないブランチは -f/--force フラグなしでは削除できません
ワークツリーでコマンド実行
gw exec feature/hoge git status
gw exec feature-hoge npm install

# ワークツリー名を省略すると fzf で選択
gw exec git status
ワークツリーへ移動
# 指定したワークツリーに移動
gw sw feature/hoge

# fzf でインタラクティブに選択
gw sw
現在のワークツリーを閉じる
# 現在のワークツリーを閉じてメインワークツリーに戻る
gw close

# 確認プロンプトをスキップして閉じる
gw close -y
gw close --yes

# ブランチも一緒に削除
gw close -b
gw close --branch

# 強制的に閉じる(マージされていないブランチも削除)
gw close -f -b

注意: gw close コマンドは:

  • メインワークツリー(main または master)からは実行できません
  • シェル統合が必要です(gw init のセットアップが必要)
  • 設定ファイルで close.force=true を設定すると確認プロンプトをスキップできます

コマンド一覧

コマンド エイリアス 説明
gw add <branch> gw a ワークツリー作成
gw add gw a 引数なしで fzf によるブランチ選択
gw add -b <branch> gw a -b 新規ブランチ + ワークツリー作成
gw add --pr <url|number> gw a --pr, gw a -p PR ブランチのワークツリー作成
gw add --open gw a --open ワークツリー作成後にエディターで開く
gw add --no-open gw a --no-open 設定を無視してエディターで開かない
gw add --editor <cmd> gw a -e 使用するエディターコマンドを指定
gw add --sync gw a --sync メインワークツリーからファイルを同期
gw add --no-sync gw a --no-sync 設定を無視してファイルを同期しない
gw add --sync-ignored gw a --sync-ignored gitignored ファイルも同期
gw add --no-sync-ignored gw a --no-sync-ignored 設定を無視して gitignored ファイルを同期しない
gw ls gw l ワークツリー一覧表示
gw ls -p gw l -p ワークツリーのフルパスのみ表示
gw rm [name...] gw r ワークツリー削除(引数なしまたは複数指定可能)
gw rm gw r 引数なしで fzf による選択(Tab で複数選択可能)
gw rm -b <name> gw r -b ワークツリーとブランチを削除
gw rm --no-branch <name> gw r --no-branch 設定を無視してブランチを削除しない
gw rm --yes/-y gw r -y 確認プロンプトをスキップ
gw rm --no-yes/--no-force gw r --no-yes 設定を無視して確認プロンプトを表示
gw exec [name] <cmd...> gw e 対象ワークツリーでコマンド実行(引数なしで fzf)
gw sw [name] gw s 対象ワークツリーに移動(引数なしで fzf)
gw close [flags] gw c 現在のワークツリーを閉じてメインに戻る
gw close -b gw c -b ワークツリーとブランチを削除して閉じる
gw close -y/--yes gw c -y 確認プロンプトをスキップして閉じる
gw close --no-yes/--no-force gw c --no-yes 設定を無視して確認プロンプトを表示
gw fd gw f fzf でワークツリー検索(ブランチ名を出力)
gw fd -p gw f -p fzf でワークツリー検索(フルパスを出力)
gw init <shell> gw i シェル初期化スクリプト出力

必要なツール

  • git
  • fzf (インタラクティブ選択用)
  • gh (PR 連携用)

ライセンス

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
fzf
git

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL