gitpp 0.5.0

Git Personal Parallel Manager — manage 100+ Git repos with one command
# gitpp 概要

最終更新: 2026-04-02

## gitpp とは

**gitpp** = git + personal + parallel。
複数の Git リポジトリを YAML 設定ファイルに基づいて並列で一括操作するツール。
コマンドは clone / pull / push の3つだけ。

元々は Bash スクリプト(`gitp.sh`)として運用していたものを Rust で再実装。
TUI による視覚的な進捗表示とシングルバイナリ配布が主な改善点。

## 想定する使用場面

100規模のリポジトリを複数の環境(自宅PC、職場、ノート等)で更新し続けている場合、
新しい環境で作業を始める前に全リポジトリを pull しないとコンフリクトが頻発する。
この「まず全部 pull」を YAML 1ファイル + `gitpp pull` で解決する。

## 設計思想

### シンプルであること

gitpp ができるのは clone / pull / push だけ。
ブランチ管理、マージ、リベース、PR 作成などは範囲外。
「何でもできる」ではなく「これだけやる」。

### デフォルトは YAML を置いた場所がリポジトリ群のルート

デフォルトでは設定ファイルをカレントディレクトリから探す。`~/.config/` のような固定パスは使わない。
複数の場所にそれぞれ YAML を置けば、独立したリポジトリ置き場を複数持てる。

`--config` / `--root` オプションで設定ファイルとリポジトリルートを個別に指定することも可能。
cron やスクリプトから実行する場合など、CWD に依存したくないケースに対応する。

### コミットユーザーの共存

同じマシンに別々の顔がある。趣味の OSS 活動、仕事のプロジェクト、
あるいは複数の趣味アカウント。システムレベル(`~/.gitconfig`)に user を定義すると、
コミットユーザーの誤爆が起こる(SNS の複垢で投稿先を間違えるのと同じ)。

gitpp はシステムレベルの git config を定義しない前提で、
YAML の `config:` セクションに書いた `git config` 互換の key-value を
リポジトリごとの `.git/config` に一括設定する。`user.name` / `user.email` だけでなく、
`pull.rebase`, `core.autocrlf` など任意の git config キーを指定可能。

- システムに user がない → config を忘れたリポではコミットがエラーになる(フェイルセーフ)
- YAML ごとに config を変えれば、置き場所単位で自然に設定が分かれる
- どの顔も対等。「メイン」と「サブ」ではなく、それぞれの場所にそれぞれの gitpp.yaml

config は独立したコマンドではなく、clone / pull / push の全操作で暗黙的に適用される。

### group によるリポジトリの分類

YAML の `group` フィールドは clone 先のサブディレクトリ名であると同時に、
リポジトリの性質を暗黙的に伝える。

| group 例 | 意味 |
|---|---|
| `private` | 非公開リポ。外部に出さない |
| `2025`, `2026` | 公開リポ。作成年で分類 |
| `gitlab` | GitHub ではなく GitLab 上のリポ |

ディレクトリ構造を見るだけで、人間にも AI エージェントにもリポの性質が伝わる。

### push の割り切りとオプトイン

push は破壊的な操作(`git add -A` で全ファイル追加 + 固定メッセージでコミット)のため、
**`comments.default` を明示的に設定しない限り無効**。clone/pull だけ使うなら `comments` セクション自体が不要。

有効にした場合の設計:
`git add -A` で全ファイルを無条件追加する。個別に指定するタイミングがないため。
`.gitignore` で事前に制御する前提。事故時はエージェントに歴史改変させる割り切り。

コミットメッセージは YAML の `comments.default` 固定(例: `"sync."`)。
重要なリポは別途丁寧にコミットし、gitpp の push は private リポの一括同期用。

### 並列度制御

101リポジトリを一斉に git pull すると、ネットワーク帯域やファイルシステムが詰まる。
`jobs` 設定(デフォルト 20)で同時実行数を制限。
CLI の `-j N` / `--jobs N` で上書きも可能(make -j, cargo build -j と同じ慣習)。

## 競合ツール

| ツール | 言語 | スター | 特徴 |
|---|---|---|---|
| gita | Python | ~1.8k | グループ管理、delegate コマンド |
| mani | Go | ~640 | YAML + タスクランナー + TUI |
| myrepos (mr) | Perl | 老舗 | 複数 VCS 対応、依存なし |
| gr | Node.js | - | タグベース自動発見 |
| git-xargs | Go | - | スクリプト一括実行、PR 自動作成 |

gitpp の差別化: **Rust + ratatui TUI + 単機能(clone/pull/push のみ)+ 並列度制御** の組み合わせは競合なし。