# git-util **Repository Path**: xinhun1994/git-util ## Basic Information - **Project Name**: git-util - **Description**: No description available - **Primary Language**: Unknown - **License**: LGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-12 - **Last Updated**: 2026-08-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # git-util Windows 本地 Git 图形客户端(WPF + .NET 10)。覆盖日常高频 git 操作:提交、推送、拉取、检出、分支、标签、在线修改提交说明、本地 merge 与冲突处理、仓库/项目配置,并内置 GitLab 合并请求与 AI 辅助功能。 ## 功能特性 - **项目 / 仓库管理**:添加本地项目文件夹(自动递归发现其下全部 git 仓库,含嵌套仓库/子模块)、项目分组与重命名、重扫、git init - **文件变更**:状态列表(修改/新增/删除/重命名/未跟踪/冲突)、暂存/取消暂存(支持多选批量)、全部暂存、diff 面板、目录结构/扁平列表双视图切换、忽略文件与常见构建产物过滤(避免噪音)、提交区(主题/正文/amend/提交并推送)、stash 暂存与恢复 - **提交历史**:分页加载、提交详情与 diff、在线修改提交说明(rebase)、检出提交、从提交创建分支 - **分支**:新建/重命名/删除/检出(脏工作区自动 stash 保护并恢复) - **标签**:新建(轻量/附注)、删除、检出 - **合并**:本地分支合并、预览(已包含/可快进/普通)、合并策略(合并/仅快进/变基)、冲突解决(采用我方/对方/编辑器/标记解决)、完成/中止 - **远程**:远端分支文件浏览、fetch - **GitLab 合并请求**:查询项目下待处理的合并请求,一键通过 GitLab API 合并 - **AI 辅助**(OpenAI 兼容接口): - AI 生成提交信息(从已暂存 diff) - AI 解释 diff/提交 - AI 总结工作区变更 - AI 会话(agent 模式):对话式操作 git(状态/日志/diff/分支/读文件等只读工具直接执行;提交/检出/合并/推送等写操作需确认) - **同步/推送**:顶部工具栏同步(fetch → 领先落后 → 按需拉/推)、独立推送入口(非快进三选项) - **设置**:远程管理、身份信息(仓库级/全局级)、拉取策略、GitLab token、AI 服务配置 - **操作日志**:结构化展示当日 git 操作(状态点/命令/退出码/stderr) ## 技术栈 | 层 | 技术 | |---|---| | UI | WPF, MaterialDesignInXaml 5.3.2, Markdig.Wpf(Markdown 渲染) | | 框架 | .NET 10(`net10.0-windows`), CommunityToolkit.Mvvm | | Git 读取 | LibGit2Sharp 0.32(纯本地只读) | | Git 写入 | git CLI(网络/认证/改写等),per-repo 串行队列防 index.lock | | AI | OpenAI 兼容 `/chat/completions`(兼容 DeepSeek / 智谱 / 通义 / Kimi / OpenAI) | ## 环境要求 - Windows 11 - git CLI 已安装并配置 PATH - .NET 10 SDK(构建/开发) ## 构建与运行 ```bash # 构建 Release dotnet build GitUtil.sln -c Release # 开发运行 dotnet run --project src/GitUtil.App # Core 冒烟测试 dotnet run --project tools/GitUtil.SmokeTests # 发布自包含单文件 exe dotnet publish src/GitUtil.App -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o dist/GitUtil-v1 ``` 产物:`dist/GitUtil-v1/GitUtil.App.exe`(自包含单文件,目标机需已装 git)。 ## 使用说明 左侧「项目」栏添加本地项目文件夹 → 自动发现仓库 → 选中仓库进入工作区。中央六个标签页 +「AI」标签: | 标签页 | 说明 | |---|---| | 文件变更 | 暂存/提交/stash/diff | | 提交历史 | 浏览、改说明、检出、建分支 | | 分支 | 新建/重命名/删除/检出 | | 标签 | 新建/删除/检出 | | 合并 | 本地分支合并与冲突解决 | | 远程 | 远端分支文件浏览 | | AI | agent 会话 + AI 助手入口 | ## AI 功能配置 1. 打开「设置 → AI」,填写: - **Base URL**:如 `https://api.deepseek.com/v1`、`https://open.bigmodel.cn/api/paas/v4` - **API Key**:在对应服务商控制台创建 - **模型**:如 `deepseek-chat`、`glm-4-flash`、`qwen-plus` 2. 保存后即可使用: - 「文件变更」页:**AI 生成**(提交信息)、**AI 解释**(选中 diff)、**AI 总结变更**(工具栏) - 「AI」标签:对话式 agent,可直接让它查看/操作仓库(写操作会弹确认框) > API Key 明文存于 `%AppData%\GitUtil\config.json`,请勿提交;建议使用 https 远端。 ## GitLab 合并请求 1. 「设置 → GitLab」填写 Personal Access Token(需 `api` 权限) 2. 打开「合并」标签页顶部「合并请求(GitLab)」区块 → 刷新 → 点「合并」通过 GitLab API 完成合并 ## 项目结构 ``` GitUtil.sln src/GitUtil.Core # 纯逻辑层,无 WPF 依赖(模型/配置/git 命令/只读读取/项目发现/AI·GitLab 客户端) src/GitUtil.App # WPF 界面(视图/视图模型/资源/转换器) tools/GitUtil.SmokeTests # Core 冒烟测试 docs/ # PRD、UI 设计文档 devLogs/ # 开发改动日志 ``` ## 配置 配置存于 `%AppData%\GitUtil\config.json`(UTF-8 无 BOM,原子写入 + .bak 备份),含:项目与分组、远程、身份、拉取策略、GitLab token、AI 服务设置、最近访问仓库。 ## 已知边界 - 远程 PR/MR 对接 GitHub/GitLab API 为二期;已支持 GitLab 合并请求(GitLab API 合并) - submodule 不自动递归(提示手动 `git submodule update --init --recursive`) - 远程 GitHub 远端不支持 API 合并(仅 GitLab)