# svnDiffTools **Repository Path**: eric8301/svn-diff-tools ## Basic Information - **Project Name**: svnDiffTools - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-28 - **Last Updated**: 2025-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SVN版本增量复制工具 一个用于复制SVN指定版本范围内变更文件的CLI和GUI工具,支持文件过滤和路径保持。 ## 功能特性 - 🔄 **版本增量复制**: 只复制指定版本范围内的变更文件 - 📁 **路径保持**: 自动保持文件的相对目录结构 - 🎯 **文件过滤**: 支持包含/排除模式,支持通配符(如 `ln_*.png`) - 📋 **预览模式**: 支持dry-run模式预览将要复制的文件 - ⚙️ **配置文件**: 支持YAML/JSON配置文件和命令行参数 - 📊 **进度显示**: 实时显示复制进度和详细信息 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 使用方式 ### GUI方式(推荐) 启动图形界面: ```bash ./gui_app.py ``` GUI界面功能: ![UI](https://gitee.com/eric8301/svn-diff-tools/raw/master/ui.png) - 📁 **路径选择**: 点击"浏览"按钮选择SVN路径和目标目录 - 📝 **历史记录**: 自动记录使用过的路径,支持下拉选择和历史管理 - 🔢 **版本设置**: 输入开始/结束版本号或最后N个版本 - 🎯 **文件过滤**: 设置包含/排除模式(如 `ln_*.png`,用逗号分隔多个模式) - ⚙️ **选项设置**: 预览模式、详细输出、强制覆盖等 - 👀 **实时预览**: 查看将要复制的文件列表 - 📊 **进度显示**: 实时显示复制进度和详细日志 - 🎨 **友好界面**: 图形化操作,易于使用 **GUI使用说明**: 1. 选择SVN工作副本路径和目标复制目录(支持历史记录快速选择) 2. 设置版本范围(开始/结束版本或最后N个版本) 3. 配置文件过滤条件(可选) 4. 选择操作选项(建议开启预览模式) 5. 点击"预览"查看将要复制的文件 6. 确认无误后点击"执行复制" **历史记录功能**: - 📝 **自动保存**: 手动输入或通过"浏览"选择的路径会自动保存 - 📋 **快速选择**: 点击下拉箭头查看历史记录,快速选择常用路径 - 🔍 **历史管理**: 点击"历史"按钮查看完整历史记录列表 - 🗑️ **清空历史**: 支持清空源路径或目标路径的历史记录 - 💾 **持久保存**: 历史记录保存在用户主目录,重启应用后仍然可用 ### 命令行方式 ```bash # 基本复制 ./svn_copy.py /svn/path /target/path --start-rev 1000 --end-rev 2000 # 排除特定文件(如 ln_*.png) ./svn_copy.py /svn/path /target/path --start-rev 1000 --end-rev 2000 --exclude "ln_*.png" # 预览模式 ./svn_copy.py /svn/path /target/path --start-rev 1000 --end-rev 2000 --dry-run # 只复制特定文件类型 ./svn_copy.py /svn/path /target/path --start-rev 1000 --end-rev 2000 --include "*.cs" # 获取最后N个版本的变更 ./svn_copy.py /svn/path /target/path --last 50 ``` ### 配置文件方式 ```bash # 使用配置文件 ./svn_copy.py --config config.yaml ``` ## 主要选项 - `--start-rev REV`: 开始版本号 - `--end-rev REV`: 结束版本号 - `--last N`: 获取最后N个版本的变更 - `--exclude PATTERN`: 排除匹配模式的文件(可多次使用) - `--include PATTERN`: 只包含匹配模式的文件(可多次使用) - `--max-size SIZE`: 最大文件大小限制(如:10MB) - `--dry-run`: 预览模式,不实际复制 - `--verbose`: 详细输出模式 - `--force`: 强制覆盖所有文件 ## 项目结构 ``` diffTools/ ├── svn_copy.py # CLI主入口脚本 ├── gui_app.py # GUI主入口脚本 ├── requirements.txt # 依赖包列表 ├── cli/ # 命令行接口模块 │ ├── main.py # CLI主程序 │ ├── arguments.py # 参数解析 │ └── config.py # 配置文件处理 ├── core/ # 核心功能模块 │ ├── svn_helper.py # SVN操作助手 │ └── file_copier.py # 文件复制器 └── gui/ # 图形界面模块 ├── main_window.py # 主窗口 ├── history_manager.py # 路径历史记录管理器 └── __init__.py # GUI模块标识 ``` ## 示例 ### 排除特定文件类型 ```bash # 排除所有 .meta 文件和 ln_ 开头的 .png 文件 ./svn_copy.py /svn/assets /target/assets --start-rev 1000 --end-rev 2000 --exclude "*.meta" --exclude "ln_*.png" ``` ### 复制特定类型文件 ```bash # 只复制 .cs 和 .py 文件 ./svn_copy.py /svn/assets /target/assets --start-rev 1000 --end-rev 2000 --include "*.cs" --include "*.py" ``` ## 故障排除 ### GUI相关问题 - **GUI无法启动**: 确保系统支持tkinter(Python标准库的一部分) - **运行时错误**: 检查SVN路径是否存在,版本号是否有效 - **权限问题**: 确保对目标目录有写入权限 ### 命令行相关问题 - **参数错误**: 使用 `./svn_copy.py --help` 查看完整参数列表 - **SVN命令失败**: 确保SVN工具已安装且在PATH中 - **路径问题**: 使用绝对路径避免相对路径问题