Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Git Manager

Ubuntu 24.04向けの独立したGitリポジトリ管理GUIです。Python 3とPySide6で実装し、Git CLIを通じて操作します。ROS 2には依存しません。

実装済み機能(v0.3)

  • ローカルGitリポジトリの登録・登録解除
  • 任意フォルダをワークスペースとして登録し、内部のGitリポジトリを自動検出
  • URL指定Clone(ブランチ指定、サブモジュール取得オプション)
  • Fetch(登録された全Remoteから取得)
  • 起動時に登録済みリポジトリを順次自動Fetch(設定でON / OFF可能)
  • 「Fetchして更新」によるFetchとAhead / Behind・リモート更新情報の再取得
  • Fetch後のリモート専用コミット一覧、変更ファイル一覧、ファイルDiff表示
  • リモート更新の通知とAhead / Behindに基づく推奨操作の表示
  • ネットワーク通信を行わない「ローカル更新」
  • Pull(未コミット変更がある場合は停止、--ff-onlyのみ)
  • Push(送信先Remote・URL・ブランチを確認、Force Pushなし)
  • Git Porcelain v2によるステージング領域・作業ツリー状態の個別判定
  • 状態別Tree表示(Staged / Unstaged / Untracked / Deleted / Conflict / Clean)
  • ファイルの状態を色で表示し、Cleanファイルも常時表示
  • フォルダ単位の再帰選択、変更ファイルの全選択・選択解除
  • 選択ファイルのStage / Unstage、Diff表示
  • ステージ済み変更のCommit(Commit対象ファイルを事前表示)
  • 選択ファイルをAdd → Commit → Pushする一括操作
  • Remoteの追加・Fetch URL変更・削除
  • ローカル/リモートブランチ一覧とUpstream・Ahead / Behind表示
  • ローカルブランチ作成時のRemoteへの自動Push・Upstream設定
  • ローカル/対応リモートブランチの名前変更・削除(コミット損失防止チェック付き)
  • Fetch時のリモートブランチ追跡情報更新と、削除済み追跡参照のPrune
  • コミット履歴とCommit概要
  • 操作履歴をSQLiteに保存
  • Gitネットワーク操作はQProcessで非同期実行

必要環境

  • Ubuntu 24.04
  • Python 3.12(Python 3.10以上)
  • Git
  • pip / venv
  • GUIセッション(Qtが利用できるデスクトップ環境)

インストール

cd /home/miquiteru/git_manager
./install.sh

PySide6はシステムPythonに入れず、プロジェクト内の .venv にインストールします。

起動

cd /home/miquiteru/git_manager
./run.sh

アプリケーション一覧に登録する場合:

./install-desktop.sh

データ保存先

  • 設定: ~/.config/git-manager/settings.json
  • 操作履歴: ~/.local/share/git-manager/operations.sqlite3

リポジトリ本体のファイルはアプリの設定場所へコピー・移動しません。

安全上の仕様

  • Clone先が既に存在する場合は上書きしません。
  • Pullは作業ツリーに変更がある場合は実行しません。
  • PullはFast-forwardのみ許可します。
  • Push前にRemote・送信先URL・ブランチを確認します。
  • Force PushはGUIに用意していません。
  • ブランチ作成時は選択したRemoteへPushしてUpstreamを設定します。Push失敗時は可能な範囲で作成したローカルブランチを元に戻します。
  • ブランチ名変更は新しいリモートブランチ作成後にローカル名・Upstreamを切り替え、最後に旧リモートブランチを削除します。途中失敗時は既存ブランチを不用意に削除せず、部分成功を操作ログに残します。
  • ブランチ削除は現在のブランチにローカル・リモート双方のCommitが統合済みの場合だけ実行します。
  • 別のGit worktreeで使用中のブランチは名前変更・削除しません。
  • 登録解除はアプリの管理対象から外すだけで、実ファイルを削除しません。
  • Git認証情報をアプリ独自に保存しません。SSH Agent、Git Credential Helperなど既存のGit認証設定を利用してください。
  • Git操作はシェル経由ではなく、引数配列でGitプロセスに渡します。

現時点の制限

  • GitHub APIによるアカウント認証、リポジトリ検索・新規作成は未実装です。通常のGit URLでCloneできます。
  • GitLab等もGit CLIで扱えるリポジトリであればURL指定で利用できます。
  • Merge ConflictをGUI内で解決する機能、Git LFS専用管理は未実装です。
  • ブランチ名変更・削除のリモート対象は、そのローカルブランチに設定されたUpstreamです。同名でも別Remoteのブランチは自動変更しません。
  • Ahead / Behindとリモート更新一覧は最後に取得したリモート追跡情報に基づきます。起動時自動Fetchまたは「Fetchして更新」で最新化してください。
  • 大きなファイルや特殊なファイル名(改行を含む等)の差分表示は今後の改善対象です。

テスト

開発用テスト依存関係を追加する場合:

.venv/bin/python -m pip install -r requirements-dev.txt

UbuntuでROS 2のpytestプラグイン自動読込と干渉する場合は、次のように実行します。

QT_QPA_PLATFORM=offscreen PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 .venv/bin/python -m pytest

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages