Some checks failed
Release / build-windows (push) Has been cancelled
✨ 新功能: - GitLab 平台完整支持(16+7 个 API 方法、前端图标/选择器) - Release 同步支持手动输入 Token 🐛 Bug 修复: - 自建平台凭证匹配(BaseURL 优先精确匹配) - Gitea 迁移 API service 字段类型修复(HTTP 422) - 构建时不再覆盖已有 config.yaml(数据丢失问题) - 错误信息显示实际 URL 🔨 改进: - 源平台开启代理时自动跳过 Gitea 原生迁移,改用本地代理中转 - Push 超时从 30s 提升到 10 分钟 - 设置 http.postBuffer=500MB,push --all 失败自动逐分支推送 - 新增 RunWithProxyTimeout 方法
GitPilot
A cross-platform desktop Git repository management tool built with Go + Wails v3 + Nuxt 4 + Vue 3.
Manage multiple Git repositories across different platforms (GitHub, Gitee, Gitea, etc.) from a single unified interface — like a lightweight, standalone version of VS Code’s Git panel.
✨ Features
Project & Group Management
- Manage repositories from GitHub, Gitee, Gitea, and custom Git platforms
- Organize projects into custom Groups (e.g.
github/user,gitea,work) - Manage Credentials per platform (GitHub / Gitee / Gitea with custom base URL)
- Clone remote repositories directly from the GUI with group assignment
- Add / remove / move projects between groups
VS Code-Style Git Operations
- View changed files with a collapsible directory tree structure
- Stage / Unstage files individually, by directory, or all at once
- Commit changes with a built-in message editor
- Discard changes for tracked and untracked files
- Diff viewer with syntax-highlighted additions and deletions
- Binary file detection — skips preview for images, executables, etc.
Multi-Remote Support
- Manage multiple remotes per project (origin, upstream, etc.)
- Remote selector dropdown to switch active remote
- Add / remove remotes through the GUI
- Push to All Remotes — one-click push current branch to every remote
- Push Tag to All Remotes — push tags to all remotes at once
Per-Project Proxy Control
- Each project can independently control proxy usage
- Three modes: Follow Global / Force Proxy On / Force Proxy Off
- All network operations (Pull / Push / Fetch / Push All) respect per-project proxy settings
- System proxy auto-detection from Windows registry / macOS scutil / Linux gsettings
Commit History
- Browse commit history with author, time, and message
- Click a commit to view its changed file list
- Select a file to view its per-file diff
- Version rollback — hard / mixed / soft reset with confirmation dialog
- Revert commit — create a reverse commit
- Search commits — filter by message keyword and/or author
Branch Management
- View all local and remote branches
- Create / Delete / Merge branches
- Switch branches via dropdown selector
- Checkout remote branches to local
- Delete remote branches
Tag Management
- View all tags with hash, message, and timestamp
- Create tags (lightweight or annotated)
- Push tags to selected remote or all remotes
- Delete tags (local and remote)
Stash Management
- Save current changes with optional message
- Apply / Pop / Drop stash entries
- View stash list with descriptions
Merge Conflict Resolution
- Detect merge state and display conflict indicator
- View and edit conflict files in a built-in editor
- Mark as resolved / Abort merge / Complete merge
Batch Operations
- View all projects overview (branch, changes, push status)
- Batch Pull / Push all projects at once
- Results displayed per project
Git Installation Detection
- Auto-detect Git installation on startup
- If not installed, show a full-screen guide
- Auto-download and install Git for Windows with progress tracking
Desktop Experience
- System tray — close window hides to tray, click tray icon to restore
- Resizable panels — drag splitters between sidebar, file list, and viewer
- Dark theme — Catppuccin Mocha color scheme with Ant Design Vue
- Native folder picker — select project paths via OS file dialog
- Git global config editor (user.name / user.email)
🏗️ Tech Stack
| Layer | Technology |
|---|---|
| Backend | Go 1.25, Wails v3 |
| Frontend | Nuxt 4, Vue 3.5, Vite 7 |
| UI Library | Ant Design Vue 4, @ant-design/icons-vue |
| Git Operations | Git CLI wrapper with per-project proxy support |
| Config | YAML-based persistent configuration |
| Build | Taskfile v3, NSIS installer (Windows) |
📁 Project Structure
GitPilot/
├── cmd/main.go # Wails app entry, system tray, window management
├── config.yaml # Projects / Groups / Credentials configuration
├── CHANGELOG.md # Version history
├── Taskfile.yml # Build tasks
├── go.mod
├── config/
│ └── config.go # YAML config types & loader/saver
├── internal/
│ ├── proxy.go # System proxy detection (Windows/macOS/Linux)
│ ├── git/
│ │ └── client.go # Git CLI wrapper with RunWithProxy support
│ └── app/
│ ├── service.go # AppService — 72 methods exposed to frontend
│ └── gitsetup.go # Git installation detection & auto-install
├── frontend/
│ ├── nuxt.config.ts
│ ├── package.json
│ └── app/
│ ├── pages/
│ │ └── index.vue # Main layout with resizable sidebar
│ ├── layouts/
│ │ └── default.vue # Ant Design dark theme provider
│ └── components/
│ ├── Sidebar.vue # Group/project tree, batch ops, credentials
│ ├── ContentArea.vue # Git status, diff, history, branches, tags
│ ├── FileTreeNode.vue # Recursive file tree with stage/discard
│ ├── CommitFileTreeNode.vue # Commit file tree viewer
│ └── GitCheck.vue # Git installation check screen
└── build/ # Wails build config, NSIS installer scripts
🚀 Getting Started
Prerequisites
- Go 1.25+
- Node.js 18+
- Git
- Task (optional, for build tasks)
- Wails v3 CLI
Development
# Clone the repository
git clone https://github.com/zhuy1228/GitPilot.git
cd GitPilot
# Install frontend dependencies
cd frontend && npm install && cd ..
# Generate Wails bindings
wails3 generate bindings -d frontend/bindings
# Run in development mode
wails3 dev -config ./build/config.yml -port 9245
Build for Production
task build
The binary will be output to the bin/ directory.
📋 API Overview
GitPilot exposes 72+ backend methods to the frontend via Wails bindings:
| Category | Methods |
|---|---|
| Project Management | GetProjectTree, AddProject, RemoveProject, CloneProject, MoveProjectToGroup, SelectDirectory |
| Group Management | GetGroups, AddGroup, UpdateGroup, RemoveGroup |
| Credential Management | GetCredentials, AddCredential, UpdateCredential, RemoveCredential |
| Git Status | GetProjectStatus, GetProjectChangedFiles, GetFileContent, GetFileDiff, GetFileDiffStaged |
| Staging | StageFiles, UnstageFiles, StageAll, UnstageAll |
| Commit | CommitChanges, DiscardFiles |
| Remote Operations | PullProject, PushProject, FetchProject, PushToAllRemotes, PushTagToAllRemotes |
| Remote Management | GetRemotes, AddRemote, RemoveRemote |
| Proxy Control | GetProjectProxy, SetProjectProxy |
| Commit History | GetCommitLog, GetCommitDiff, GetCommitFiles, GetCommitFileDiff, RevertCommit, SearchCommitLog |
| Branch Management | GetBranches, SwitchBranch, CreateBranch, DeleteBranch, MergeBranch, ResetProject |
| Remote Branches | GetRemoteBranches, CheckoutRemoteBranch, DeleteRemoteBranch |
| Tags | GetTags, CreateTag, DeleteTag, PushTag |
| Stash | StashSave, GetStashList, StashApply, StashPop, StashDrop |
| Conflict Resolution | IsMerging, GetConflictFiles, GetConflictFileContent, SaveConflictFile, ResolveConflictFile, AbortMerge |
| Batch Operations | GetAllProjectOverview, BatchPull, BatchPush |
| Settings | GetGitGlobalConfig, SetGitGlobalConfig, GetAppSettings, UpdateAppSettings |
| Git Setup | CheckGitInstalled, SelectGitInstallDir, InstallGit |
📄 License
Description