1748614153
2025-05-30 12:54:00
GITのインタラクティブな追加機能のゴーポート、同じインターフェイスを提供する git add -i そして git add -p、いくつかの機能強化があります。
- インタラクティブなステージング:ファイルとハンクを選択して、インタラクティブにステージングします
- パッチモード:個々のハンクをレビューして選択します
y/n/s/e/q/a/dコマンド - ハンク操作:スプリットハンク、手動でハンクを編集し、ハンク間をナビゲートします
- 複数のパッチモード:ステージ、リセット、チェックアウト、スタッシュ、ワークツリー操作のサポート
- git統合:完全なgitカラー構成とリポジトリサポート
- 端子UI:キーボードショートカットを使用したカラーコーディングインターフェース
このGo実装は、元のPerlスクリプト以外にいくつかの強力な機能を追加します。
Regexパターンを使用して、すべてのファイルでハンクをフィルターします。
G # Set global filter to show only hunks matching pattern
G # Clear filter (interactive prompt for new pattern)
ワークフローの例:
G TODO– 「dodo」コメントを含むハンクのみを表示しますG import– インポートステートメントの変更に焦点を当てますG console.log– すべてのデバッグステートメントを見つけます
すべての塊を自動的に最大の粒度に分割します。
S # Enable auto-splitting globally and split all hunks
これは、それ以上の分割が不可能になるまでハンクを再帰的に分割し、ステージングされるものを最大限に制御することができます。
すべてのファイルのすべてのハンクを受け入れます(フィルタリングと分割後):
A # Accept all visible hunks in all remaining files
強力なワークフローの組み合わせ:
S→G→A– すべてを分割し、パターンごとにフィルタリングし、すべての一致を受け入れますG console.log→A– すべてのデバッグコードを変更する
- ローカル検索(
/)):グローバルフィルターに影響を与えることなく、現在のファイル内で検索します - ステータス表示:shows
[filter: pattern]そして[auto-split]インジケーター - クロスファイルフィルタリング:セッション内のすべてのファイルにグローバルフィルターが持続します
この実装をデフォルトとして使用します git add -i そして git add -p、Go binディレクトリにインストールして、git execパスを更新できます。
# Build and install to Go bin directory
go build -o "$(go env GOPATH)/bin/git-add--interactive" .
# Add Go bin to Git's exec path (add to your shell profile for persistence)
export GIT_EXEC_PATH="$(go env GOPATH)/bin:$(git --exec-path)"
これを設定した後、 git add -i そして git add -p Perlスクリプトの代わりにGo実装を使用します。
# Check which git-add--interactive is being used
which git-add--interactive
# Test interactive add
git add -i
# Test patch mode
git add -p
元のPerl実装に戻るには:
# Remove the Go binary from your Go bin
rm "$(go env GOPATH)/bin/git-add--interactive"
# Reset Git exec path (remove from your shell profile too)
unset GIT_EXEC_PATH
# Or set it back to default
export GIT_EXEC_PATH="$(git --exec-path)"
# Run directly
./git-add--interactive
# Or if installed as Git command
git add -i
これにより、オプションを備えたメインインタラクティブメニューが起動します。
status– 変更を伴うパスを表示しますupdate– 段階的な変更に作業ツリー状態を追加しますrevert– 段階的な変更を頭に戻しますadd untracked– 段階的な変更にトラックされていないファイルを追加しますpatch– ハンクを選び、選択的に更新しますdiff– ヘッドとインデックスの間の違いを表示しますquit– プログラムを終了しますhelp– ヘルプを表示します
# Direct usage
./git-add--interactive --patch --
./git-add--interactive --patch=stage --
./git-add--interactive --patch=reset --
./git-add--interactive --patch=checkout --
# Or if installed as Git command
git add -p # Same as --patch
git add --patch # Stage mode
git reset -p # Reset mode
git checkout -p # Checkout mode
パッチモードを使用すると、これらのコマンドでハンクをインタラクティブに選択できます。
y– この塊を受け入れますn– この塊をスキップしますq– やめる;この塊と残りのものをスキップしますa– ファイル内のこの塊と後のすべてのハンクを受け入れるd– ファイル内のこの塊とすべての後のハンクをスキップしますs– 現在の塊を小さな塊に分割しますe– 現在の塊を手動で編集しますj/k– 次/以前の未定の塊に移動しますJ/K– 次/前の塊に移動しますg– 特定のハンク番号に移動します/– 現在のファイルでパターンを検索しますG– すべてのファイルにグローバルフィルターを設定します(または空のパターンでクリア)S– グローバルに自動分割を有効にし、すべての塊を分割しますA– 残りのすべてのファイルにすべてのハンクを受け入れます?– ヘルプを表示します
コードベースは、これらのメインパッケージに編成されています。
main.go– エントリポイントとコマンドライン解析internal/git/-GITリポジトリの相互作用と操作repository.go-Gitリポジトリの抽象化とコマンドの実行status.go– ファイルステータスの解析と追跡patch.go– 解析とパッチモードの操作
internal/ui/– インタラクティブ端子インターフェイスapp.go– メインアプリケーションロジックとメニューシステムpatch.go– パッチモードUIと塊の相互作用
テストスイートを実行します:
冗長出力でテストを実行します:
コードはGoの規則に従い、以下を含みます。
- コア機能の包括的な単体テスト
- ユーザーの色と構成を尊重するgit統合
- エッジケースのエラー処理と無効な入力
- すべての主要なパッチモードと操作のサポート
この実装は、元のPerlと同じ機能を提供します git-add--interactive スクリプト、以下を含む:
- すべてのパッチモード(ステージ、リセット、チェックアウト、スタッシュ、ワークツリーバリアント)
- 完全な塊操作(分割、編集、ナビゲーション)
- Gitカラー構成サポート
- プレフィックスマッチングを使用したインタラクティブな選択
- 範囲とコンマ区切りの選択
#Cwardengitaddinteractivegitadd追加機能を備えたインタラクティブ