# 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 はシステムレベルの user を定義しない前提で、
リポジトリごとの `.git/config` に一括設定する。
- システムに user がない → config を忘れたリポではコミットがエラーになる(フェイルセーフ)
- YAML ごとに user を変えれば、置き場所単位で自然にコミットユーザーが分かれる
- どの顔も対等。「メイン」と「サブ」ではなく、それぞれの場所にそれぞれの gitpp.yaml
config は独立したコマンドではなく、clone / pull / push の全操作で暗黙的に適用される。
### group によるリポジトリの分類
YAML の `group` フィールドは clone 先のサブディレクトリ名であると同時に、
リポジトリの性質を暗黙的に伝える。
| `private` | 非公開リポ。外部に出さない |
| `2025`, `2026` | 公開リポ。作成年で分類 |
| `gitlab` | GitHub ではなく GitLab 上のリポ |
ディレクトリ構造を見るだけで、人間にも AI エージェントにもリポの性質が伝わる。
### push の割り切り
`git add -A` で全ファイルを無条件追加する。個別に指定するタイミングがないため。
`.gitignore` で事前に制御する前提。事故時はエージェントに歴史改変させる割り切り。
コミットメッセージは YAML の `comments.default` 固定(例: `"update."`)。
重要なリポは別途丁寧にコミットし、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 のみ)+ 並列度制御** の組み合わせは競合なし。