# GitChangedFiles **Repository Path**: Ultron2018/git-changed-files ## Basic Information - **Project Name**: GitChangedFiles - **Description**: GitChangedFiles - Git 提交文件差异导出工具 通过浏览器界面,按 **Git 作者 + 日期范围** 筛选提交记录,导出变更文件到独立目录并生成详细报表。 Git 提交变更文件导出工具 —— 按作者/日期范围筛选 Git 提交,提取变更文件并保留完整目录结构,自动生成详细日志并打包为 ZIP,解压即覆盖部署,目标方无需安装 Git 或管理仓库。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-12 - **Last Updated**: 2026-06-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GitChangedFiles - Git 变更文件导出工具 按 **Git 作者 + 日期范围** 筛选提交记录,将变更文件导出到独立目录并打包为 ZIP,**直接解压覆盖目标项目即可完成更新**,无需目标环境安装 Git 或管理仓库。 ## 适用场景 开发者迭代开发后,只需将某段时间内变更的文件发给对方(测试、部署、外包对接),对方**解压 ZIP 后直接覆盖项目目录**即可,无需安装 Git、无需拉取仓库、无需处理冲突。 ## 功能 - 按作者(可选)、起始/截止日期查询 Git 提交 - 展示提交列表(哈希、作者、日期、备注、变更文件) - 将变更文件复制到独立目录,保留完整仓库路径结构 - **导出文件为提交时刻的版本**(而非仓库最新 HEAD 版本) - 自动暂存/恢复工作区修改,切换分支导出后回到原分支 - 生成 Markdown 格式变更日志 - 自动打包为 ZIP 压缩包(解压即用,直接覆盖) - 多分支支持:下拉搜索选择目标分支,自动 `git checkout` - 支持取消导出操作 ## 两种界面 | 界面 | 启动方式 | 特点 | |------|---------|------| | **Web 版** | `main.py` → 选择 Web 版 / `python get_user_file_web.py` | 浏览器访问,SSE 实时日志,支持取消 | | **GUI 版** | `main.py` → 选择 GUI 版 / `python gui.py` | PySide6 原生窗口,独立桌面应用 | ### Web 版额外功能 - **实时日志流**:导出过程中日志实时推送显示,无需等待完成 - **取消导出**:导出过程中可随时取消 - **配置持久化**:上次填写的路径自动保存 ### GUI 版额外功能 - 文件浏览器选择路径 - 搜索式分支下拉选择器 - 配置自动加载/保存 ## 快速开始 ### 安装依赖 ```bash pip install flask pyinstaller # GUI 版需要额外安装: pip install PySide6 ``` ### 运行 ```bash # 启动器(选择 Web 或 GUI) python main.py # 或直接启动 Web 版 python get_user_file_web.py # 或直接启动 GUI 版 python gui.py ``` Web 版浏览器打开 `http://127.0.0.1:5000` ### 打包为 EXE ```bash # Web 版 pyinstaller --onefile --noconsole --add-data "templates;templates" --add-data "static;static" --add-data "favicon.ico;." --icon favicon.ico --name GitChangedFiles_Web main.py # GUI 版(体积较大,~200MB) pyinstaller --onefile --noconsole --add-data "templates;templates" --add-data "static;static" --add-data "favicon.ico;." --icon favicon.ico --name GitChangedFiles main.py ``` ## 使用说明 | 参数 | 必填 | 说明 | |------|------|------| | 仓库路径 | 是 | 本地 Git 仓库绝对路径 | | Git 作者 | 否 | 筛选特定作者,留空查询全部 | | 导出目录 | 是 | 输出文件存放目录 | | 分支 | 是 | 从下拉列表中选择 | | 开始日期 | 是 | 查询起始日期 | | 截止日期 | 是 | 查询截止日期(包含当天) | ## 输出结构 ``` 导出目录/ ├── user_changed_files_20260611/ ← 变更文件目录(保留仓库路径) │ └── src/... ├── user_changed_files_20260611.md ← 提交日志报表(含每次提交的详细信息) └── user_changed_files_20260611.zip ← 压缩包,解压直接覆盖目标项目 ``` ## 技术栈 - **后端**: Python 3 + Flask + PySide6 + subprocess (Git CLI) - **前端** (Web): 原生 JavaScript SSE + 本地 Bootstrap 5 - **核心引擎**: `exporter.py` 共享模块,Web / GUI 共用 - **打包**: PyInstaller (`--onefile --noconsole`) - **配置持久化**: `config.json` 自动保存/加载 ## 项目结构 ``` . ├── main.py # 启动器(Web/GUI 选择对话框) ├── get_user_file_web.py # Flask Web 版本(SSE 实时日志) ├── gui.py # PySide6 GUI 版本 ├── exporter.py # 共享导出引擎(Web + GUI 共用) ├── templates/ │ └── index.html # Web 前端页面 ├── static/ │ ├── css/style.css # 自定义深色主题样式 │ └── js/bootstrap.bundle.min.js # Bootstrap 5.3(本地) ├── favicon.ico # 应用图标 ├── config.json # 自动生成的配置文件 ├── requirements.txt ├── .gitignore └── README.md ``` ## 注意事项 - 依赖 Git 命令行(`git` 需加入系统 PATH) - 导出时会自动暂存当前工作区修改,导出后恢复到原分支并恢复暂存 - 提取的文件为**提交时刻的版本**(通过 `git show {commit_hash}:{file}` 获取) - 日期 --until 参数采用当天 23:59:59 以包含完整一天