gitpush-mcp で force-push (with-lease) に対応する #8

Closed
opened 2026-09-07 22:38:26 +09:00 by bot-genji1024 · 1 comment
Collaborator

背景

private-note#10 で15ファイルの単一修正が forgejo-mcp contents API で15コミットに分割され、履歴汚染と指摘された(c459)。
ローカルで 4fa6010 へ soft reset して単一コミット b83aa26 に整理済みだが、gitpush-mcp の push は plain push のみ(force-push 未対応)のため ! [rejected] (non-fast-forward) で push できない。
private-note#10 c463 で、オーナーから「containerized-agents に新しくイシューを立てて、gitpush-mcp で強制プッシュができるようにしてください。実装まで着手してもらって構いません」と指示された。本イシューで方針+実装を行う。

方針

  • gitpush-mcp の push に force: bool = False を追加する。最小実装。
  • force=true のときのみ git push --force-with-lease --set-upstream <remote> <branch>:<branch> を実行する。--force ではなく --force-with-lease を採用し、リモートが想定外に進んでいた場合の誤上書きを防ぐ。
  • 既定 force=false の挙動は現状のまま(plain push)。呼び出し側が明示した場合のみ force する。
  • permission は現状のまま(pusher のみ gitpush_* allow)。force-push の実行可否判断はオーナーが行い、bot は独断で force しない(スキル既定どおり)。

対象外

  • forgejo-mcp / github-mcp 経由 push の制限は #7 で対応する。本イシューでは扱わない。

受け入れ基準

  • push(..., force=false) が従来どおり plain push する。
  • push(..., force=true) で non-fast-forward が解消できる(ローカル検証)。
  • トークンがログ・返却値に露出しない(既存の scrub 維持)。
## 背景 private-note#10 で15ファイルの単一修正が forgejo-mcp contents API で15コミットに分割され、履歴汚染と指摘された(c459)。 ローカルで `4fa6010` へ soft reset して単一コミット `b83aa26` に整理済みだが、gitpush-mcp の `push` は plain push のみ(force-push 未対応)のため `! [rejected] (non-fast-forward)` で push できない。 private-note#10 c463 で、オーナーから「containerized-agents に新しくイシューを立てて、gitpush-mcp で強制プッシュができるようにしてください。実装まで着手してもらって構いません」と指示された。本イシューで方針+実装を行う。 ## 方針 - gitpush-mcp の `push` に `force: bool = False` を追加する。最小実装。 - `force=true` のときのみ `git push --force-with-lease --set-upstream <remote> <branch>:<branch>` を実行する。`--force` ではなく `--force-with-lease` を採用し、リモートが想定外に進んでいた場合の誤上書きを防ぐ。 - 既定 `force=false` の挙動は現状のまま(plain push)。呼び出し側が明示した場合のみ force する。 - permission は現状のまま(pusher のみ `gitpush_*` allow)。force-push の実行可否判断はオーナーが行い、bot は独断で force しない(スキル既定どおり)。 ## 対象外 - forgejo-mcp / github-mcp 経由 push の制限は #7 で対応する。本イシューでは扱わない。 ## 受け入れ基準 - `push(..., force=false)` が従来どおり plain push する。 - `push(..., force=true)` で non-fast-forward が解消できる(ローカル検証)。 - トークンがログ・返却値に露出しない(既存の scrub 維持)。
Author
Collaborator

実行結果

実施内容

  • 本イシュー #8(c463 指示による新規作成)の実装として PR #10 を作成しました(8-feat/gitpush-force-with-lease → main)。
  • dockerfiles/gitpush-mcp/server.py の push に force: bool = False を追加。真のときのみ --force-with-lease。

変更ファイル

  • dockerfiles/gitpush-mcp/server.py — force フラグ追加+with-lease 実行

動作確認

  • python3 -m py_compile — 成功
  • 本ブランチを gitpush-mcp plain push で push 成功
  • force=true の実 force-push は新イメージでのみ検証可能。マージ後に private-note#10 の b83aa26 で検証する(PR 本文に手順記載)

関連

  • Closes #8
  • PR: #10
  • 起因: private-note#10 c463

備考

  • permission 変更なし。force 実行可否はオーナー判断、bot は独断で force しない。
## 実行結果 ### 実施内容 - 本イシュー #8(c463 指示による新規作成)の実装として PR #10 を作成しました(`8-feat/gitpush-force-with-lease` → `main`)。 - `dockerfiles/gitpush-mcp/server.py` の `push` に `force: bool = False` を追加。真のときのみ `--force-with-lease`。 ### 変更ファイル - `dockerfiles/gitpush-mcp/server.py` — force フラグ追加+with-lease 実行 ### 動作確認 - [x] `python3 -m py_compile` — 成功 - [x] 本ブランチを gitpush-mcp plain push で push 成功 - [ ] `force=true` の実 force-push は新イメージでのみ検証可能。マージ後に private-note#10 の `b83aa26` で検証する(PR 本文に手順記載) ### 関連 - Closes #8 - PR: #10 - 起因: private-note#10 c463 ### 備考 - permission 変更なし。force 実行可否はオーナー判断、bot は独断で force しない。
Sign in to join this conversation.
No labels
enhancement
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
genji1024/containerized-agents#8
No description provided.