VSCode SVN 插件
继承了svn基本功能,并增加了AI提交日志功能 方便非windows使用
功能特性
✅ 已实现功能
基础功能
- ✅ 单个文件提交**(文件右键点击 上传)
- ✅ 文件差异对比和提交**
- ✅ 更新工作副本**(文件、目录和工作区)
- ✅ 自定义SVN工作副本路径** (需要手动找到 svn 根目录)
- ✅ (默认免费)AI生成提交日志**(目前支持 openai qwen 模型 默认模型只能用免费用 3 个月)
- ✅ 支持文件夹 提交操作
- ✅ 查看文件或文件夹的SVN日志记录**
- ✅ 显示本地版本号并标记未更新到本地的版本**
- ✅ SVN日志AI代码分析功能**(智能分析代码变更,提供专业技术解读)
- ✅ AI分析结果本地缓存**(自动缓存30天,节省API调用费用)
- ✅ 智能版本冲突处理**(提交时自动检测版本冲突,引导用户更新)
用户界面
- ✅ 上下文菜单集成**(右键菜单)
- ✅ 差异对比和提交界面**(左右对比视图)
- ✅ SVN日志查看界面**(日志列表和详情视图)
- ✅ 标签式文件后缀筛选**(直观的标签界面,显示文件数量)
使用方法
安装
- 确保您的系统已安装SVN命令行工具
- 在VSCode扩展市场中搜索"VSCode SVN - ai"并安装
- 重启VSCode
文件上传
- 在资源管理器中右键点击文件
- 选择"SVN: 上传文件"
- 输入提交信息
- 文件将被添加到SVN(如果尚未添加)并提交
文件夹上传
- 在资源管理器中右键点击文件夹
- 选择"SVN: 上传文件夹"
- 系统会显示文件夹提交面板,自动应用过滤规则排除不需要的文件
- 面板顶部会显示过滤统计信息(如有文件被排除)
- 文件类型筛选:使用复选框快速筛选不同状态的文件(已修改、新增、已删除等)
- 文件后缀筛选:使用直观的标签界面筛选特定后缀的文件
- 每个标签显示后缀名和对应的文件数量,如
.js (5) 表示有5个JavaScript文件
- 点击标签可切换选择状态,选中的标签会高亮显示
- 使用"全选"按钮选择所有后缀,"清空"按钮取消所有选择
- 标签支持悬停效果,提供更好的交互体验
- 选择要提交的文件
- 输入提交信息
- 文件夹中的更改将被提交到SVN
注意:
- 上传文件夹时会自动应用过滤规则,被排除的文件不会显示在文件列表中,也不会被提交到SVN
- 如果文件被直接删除(而非通过SVN删除),系统会自动检测到这些"丢失"状态的文件,并在提交前自动执行
svn remove 命令将它们标记为删除状态
- 对于丢失状态的文件,您可以点击"恢复"按钮来恢复意外删除的文件
- 智能面板管理:如果已经打开了一个文件夹提交面板,再右键另一个文件夹选择提交时:
- 如果是相同文件夹,会直接显示现有面板
- 如果是不同文件夹,会自动关闭旧面板并创建新面板,确保显示正确的文件夹内容
文件差异对比和提交
- 在资源管理器中右键点击文件
- 选择"SVN: 提交文件(显示差异)"
- 如果文件未在SVN控制下,会询问是否添加到SVN
- 系统会打开一个左右对比界面,左侧显示SVN版本,右侧显示工作副本
- 在界面底部输入提交日志
- 点击"提交"按钮完成提交(如果文件有差异,提交按钮才可点击)
- 您也可以点击"使用AI生成提交日志"按钮,自动生成基于文件差异的提交日志
AI生成提交日志
- 在提交界面中,点击"使用AI生成提交日志"按钮
- 系统会分析文件差异,并使用AI生成一个专业的提交日志
- 生成的提交日志会自动填充到提交日志文本框中
- 您可以直接使用生成的日志,或根据需要进行修改后提交
- 首次使用时,系统会提示您设置API密钥
提交前缀管理
- 在提交界面中,您可以使用前缀功能为提交日志添加统一的前缀
- 从下拉列表中选择之前使用过的前缀,或在输入框中输入新的前缀
- 点击"应用前缀"按钮将前缀添加到提交日志的开头
- 前缀历史记录以用户/本机为单位存储,所有项目都可以共享相同的前缀列表
- 系统会自动保存最近使用的10个前缀,方便重复使用
文件和文件夹过滤
- 自动过滤:插件会自动排除配置中指定的文件和文件夹,这些文件不会参与SVN操作
- 配置管理:通过命令面板执行"SVN: 配置过滤规则"来管理过滤配置
- 支持的过滤类型:
- 文件模式:支持glob模式匹配(如
*.log , *.tmp , node_modules )
- 文件夹:直接指定文件夹名称(如
dist , build , .git )
- 默认排除项:
- 文件:
*.log , *.tmp , node_modules , .DS_Store , Thumbs.db
- 文件夹:
node_modules , .git , .vscode , dist , build , out , target
- 配置选项:
- 配置排除文件模式
- 配置排除文件夹
- 查看当前配置
- 重置为默认配置
- 查看过滤信息:通过命令面板执行"SVN: 显示过滤信息"查看当前的过滤配置
AI配置
插件支持接入任何兼容OpenAI格式的AI服务,包括但不限于:
- OpenAI GPT系列
- 通义千问
- 文心一言
- 智谱AI
- 本地部署的LLM服务等
配置方式
首次使用自动引导:
- 首次使用AI功能时,系统会自动弹出配置引导
- 按照提示依次输入API地址、模型ID和API密钥即可
手动配置:
- 打开VSCode设置(文件 > 首选项 > 设置)
- 搜索"vscode-svn.ai"查看所有AI相关配置
- 配置以下三个必需项:
vscode-svn.aiApiUrl :AI服务的API访问地址
vscode-svn.aiModelId :AI模型ID或名称
vscode-svn.aiApiKey :AI服务的API密钥
配置示例
OpenAI GPT:
- API地址:
https://api.openai.com/v1/chat/completions
- 模型ID:
gpt-3.5-turbo 或 gpt-4
- API密钥:
sk-...
通义千问:
- API地址:
https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
- 模型ID:
qwen-turbo 或 qwen-plus
- API密钥:
sk-...
本地服务:
- API地址:
http://localhost:8000/v1/chat/completions
- 模型ID:根据本地服务配置
- API密钥:根据本地服务要求
更新文件
- 在资源管理器或编辑器中右键点击文件
- 选择"SVN: 更新文件"
- 如果文件有本地修改,系统会询问是否继续更新
- 更新完成后,如果文件已在编辑器中打开,内容会自动刷新
更新目录
- 在资源管理器中右键点击文件夹
- 选择"SVN: 更新目录"
- 系统会打开一个更新面板,显示更新进度和结果
- 更新完成后,面板会显示所有更新的文件列表和状态
- 您可以点击"重新更新"按钮再次更新,或点击"关闭"按钮关闭面板
更新工作区
- 打开命令面板(按下
F1 或Ctrl+Shift+P )
- 执行"SVN: 更新工作区"命令
- 系统会更新整个工作区(当前打开的项目)
- 更新面板会显示所有更新的文件列表和状态
设置SVN工作副本路径
如果您的文件不在标准的SVN工作副本结构中,或者需要将文件关联到特定的SVN仓库,可以手动设置SVN工作副本路径:
- 在资源管理器中右键点击任意文件或文件夹
- 选择 "SVN: 设置SVN工作副本路径"
- 在弹出的对话框中选择包含
.svn 目录的SVN工作副本根目录
- 设置成功后,插件将使用该路径作为SVN工作副本根目录
您也可以通过命令面板(按下F1 或Ctrl+Shift+P )执行"SVN: 设置SVN工作副本路径"命令。
清除SVN工作副本路径设置
如果需要清除之前设置的自定义SVN工作副本路径:
- 打开命令面板(按下
F1 或Ctrl+Shift+P )
- 执行"SVN: 清除SVN工作副本路径"命令
智能版本冲突处理
插件内置了智能的版本冲突检测和处理机制,当提交时遇到版本冲突时会自动引导用户解决:
冲突检测
- 自动检测SVN "out of date"错误(E155011、E170004)
- 当其他人已经提交了对相同文件或文件夹的修改时触发
- 适用于单文件提交和批量文件提交
智能处理选项
当检测到版本冲突时,系统会弹出友好的提示对话框,提供三种处理方式:
自动更新并重试提交(推荐)
- 自动执行SVN更新操作,将工作副本更新到最新版本
- 更新完成后询问是否继续提交
- 如果选择继续,会自动重新执行提交操作
- 整个过程无需手动干预
仅更新不重试
- 仅执行SVN更新操作
- 更新完成后提示用户手动重新提交
- 适合需要检查更新内容后再决定是否提交的场景
取消操作
- 不执行任何操作,保持当前状态
- 用户可以手动处理冲突后再次尝试提交
详细提示信息
- 对话框会详细说明冲突产生的原因
- 提供操作建议和注意事项
- 显示友好的中文提示,便于理解
错误处理
- 如果更新过程中出现错误,会显示具体的错误信息
- 更新失败时不会影响原有的工作副本状态
- 提供完整的错误日志便于问题诊断
编码问题处理
本插件针对SVN操作中可能出现的编码问题进行了特殊处理:
- 设置了环境变量以确保SVN命令使用UTF-8编码
- 对于差异比较,添加了
--force 和其他参数以处理特殊字符
- 当标准差异比较失败时,会提供备用方法显示文件变化
- 即使在无法显示详细差异的情况下,也能继续进行提交操作
如果您在使用过程中仍然遇到编码问题,可以尝试:
- 确保您的SVN客户端配置为使用UTF-8编码
- 在SVN配置文件中设置
svn:mime-type 属性为text/plain;charset=UTF-8
- 对于特殊文件,可以直接使用"SVN: 上传文件"命令而不查看差异
查看SVN日志
- 在资源管理器中右键点击文件或文件夹
- 选择"SVN: 查看日志记录"
- 系统会打开一个日志查看面板,左侧显示日志列表,右侧显示详情
- 面板顶部会显示当前文件或文件夹的本地修订版本号
- 日志列表中会用橙色边框和"未更新"标记显示尚未更新到本地的版本
- 点击左侧的日志条目可以查看该版本的详细信息,包括提交信息和变更文件列表
- 点击变更文件列表中的文件可以查看该文件在该版本的具体变更内容
- 可以点击"加载更多"按钮查看更多历史记录
- 点击"刷新"按钮可以刷新日志列表和本地版本号信息
AI代码分析功能
- 智能分析:在右侧详情面板中,点击"🤖 AI分析代码差异"按钮
- 深度解读:AI会分析该修订版本中所有文件的代码变更,提供专业的技术分析
- 分析内容:包括修改目的、功能影响、代码质量评估等
- 便捷操作:分析结果会在新窗口中显示,支持一键复制分析内容
- 智能识别:自动识别新增、修改、删除的文件,并针对不同类型的变更提供相应的分析
- 智能缓存系统:
- 基于修订版本、文件差异内容和AI模型生成唯一缓存ID
- 相同的代码差异会自动使用缓存结果,避免重复的AI API调用
- 缓存有效期为30天,最多保存1000条记录
- 缓存结果界面会显示明显的"💾 缓存结果"标识和缓存时间
- 实时分析结果显示"🔄 实时AI分析结果"标识
- 强制重新分析:
- 对于缓存结果,可以点击"🔄 重新分析"按钮强制获取最新AI分析
- 重新分析会跳过缓存,直接调用AI API获取最新结果
- 新的分析结果会自动更新缓存
- 智能文件过滤:
- 自动排除二进制文件(.exe, .dll, .jpg, .png, .xlsx, .pdf等)
- 自动排除系统文件和构建产物(node_modules, .git, build/, dist/等)
- 只分析当前界面显示的文件,提高分析效率和准确性
- 分析结果中显示详细的过滤统计信息
- 缓存管理:提供缓存统计、清理过期缓存、清空所有缓存等管理功能
日志筛选功能
- 筛选条件:支持按修订版本、日期范围、作者、提交内容进行筛选
- 筛选数量提示:
- 工具栏显示当前筛选结果数量,如"(筛选结果: 15 条)"
- 日志列表顶部显示详细的筛选状态信息
- 筛选状态包含具体的筛选条件,如"🔍 筛选条件: 作者: 张三, 日期: 2024-01-01 至 2024-01-31"
- 非筛选状态显示为"📄 显示最新记录"或"📄 显示全部记录"
- 筛选模式:
- 修订版本筛选:默认显示最近50条记录
- 日期筛选:显示指定日期范围内的所有记录(无数量限制)
- 视觉提示:筛选状态下的数量信息会以橙色显示,便于区分
显示本地修订版本号
- 在资源管理器中右键点击文件或文件夹
- 选择"SVN: 显示本地修订版本号"
- 系统会显示该文件或文件夹当前的本地SVN版本号
恢复文件或文件夹
恢复单个文件
- 在资源管理器或编辑器中右键点击文件
- 选择"SVN: 恢复文件"
- 确认恢复操作(此操作不可撤销)
- 文件将被恢复到SVN版本库状态,所有本地修改将丢失
恢复整个文件夹
- 在资源管理器中右键点击文件夹
- 选择"SVN: 恢复文件夹"
- 系统会显示确认对话框,警告此操作将恢复文件夹及其所有子文件和子文件夹
- 确认后,整个文件夹将被递归恢复到SVN版本库状态
- 所有本地修改(包括新增、修改、删除的文件)都将丢失
注意:
- 恢复操作不可撤销,请谨慎使用
- 恢复文件夹会影响该文件夹下的所有文件和子文件夹
- 被过滤器排除的文件夹不会被恢复
- 如果文件夹不在SVN工作副本中,系统会提示设置SVN工作副本路径
注意事项
- 请确保系统已安装SVN命令行工具
- 文件必须位于SVN工作副本中,或者已通过"设置SVN工作副本路径"功能关联到SVN工作副本
- 请确保您有足够的权限执行SVN操作
- 对于包含特殊字符或二进制文件,差异比较可能无法正常显示,但仍可以提交
- 文件名中包含特殊字符(如@符号)的文件现在可以正常操作,插件会自动处理SVN命令中的特殊字符转义
开发里程碑
4.7.4
- 新增智能版本冲突处理功能:提交时自动检测SVN "out of date"错误并引导用户解决
- 支持自动检测E155011和E170004错误码,识别版本冲突情况
- 提供三种智能处理选项:自动更新并重试提交、仅更新不重试、取消操作
- 友好的中文提示对话框,详细说明冲突原因和解决建议
- 适用于单文件提交和批量文件提交场景
- 完善的错误处理机制,确保操作安全可靠
4.4.1
- 修复SVN特殊字符处理问题:解决了文件名中包含@符号导致SVN命令执行失败的问题
- 增强文件路径处理逻辑,自动处理特殊字符转义
- 提高了插件对特殊字符的兼容性
4.4.0
- 新增文件夹恢复功能:支持将整个文件夹及其所有子文件和子文件夹恢复到SVN版本库状态
- 在文件夹右键菜单中添加"SVN: 恢复文件夹"选项
- 使用
svn revert -R 命令进行递归恢复,确保所有修改都被撤销
- 添加安全确认对话框,防止意外操作导致数据丢失
- 支持自定义SVN根目录和过滤器规则
- 修复了单文件恢复功能中缺少revert命令的问题
4.3.3
- 修复missing文件提交错误:解决了提交missing文件时出现"ENOENT: no such file or directory"错误的问题
- 优化文件状态检查逻辑,对missing文件进行特殊处理,避免尝试访问已删除的文件
- 增强错误处理机制,确保missing文件能够正常提交
4.3.2
- 修复文件删除检测问题:解决了当文件被直接删除(而非通过SVN删除)时,文件夹提交无法检测到删除操作的问题
- 新增对"missing"状态文件的处理,自动将丢失的文件标记为删除状态
- 在提交前自动执行
svn remove 命令处理丢失的文件
- 为丢失状态的文件添加恢复按钮,允许用户恢复意外删除的文件
- 优化AI提交日志生成,正确处理删除和丢失状态的文件
4.3.1
- 完善文件夹上传的过滤功能:在文件夹提交面板中集成排除系统
- 文件夹上传时自动应用过滤规则,排除不需要的文件
- 在提交面板顶部显示过滤统计信息
- 被排除的文件不会显示在文件列表中,提升用户体验
4.3.0
- 新增本地修订版本号显示功能
- 在SVN日志面板中标记尚未更新到本地的版本
- 优化了日志界面布局,避免标记遮挡提交者名称
- 添加了SVN日志面板筛选功能的支持
- 增加了本地版本与服务器版本对比功能
4.2.6
- 新增文件和文件夹过滤功能:支持配置排除文件和文件夹,这些文件和文件夹将不参与SVN操作(提交、更新、添加等)
- 支持glob模式匹配文件名
- 提供配置界面管理过滤规则
- 默认排除常见的临时文件和构建目录
4.2.5
- 增加文件|文件夹目录获取 svn 记录界面
- 提交前缀存储优化:将SVN提交前缀的存储方式从项目级别改为用户/本机级别,现在所有项目都可以共享相同的前缀历史记录
4.2.4
4.2.3
对比按钮功能优化
- 根据文件状态显示不同的按钮文本和行为
- 修改状态(
modified )的文件:显示"对比"按钮,点击后显示左右对比视图
- 其他状态的文件:显示"打开"按钮,点击后直接在编辑器中打开文件
恢复按钮功能添加
- 为修改状态(
modified )和删除状态(deleted )的文件添加"恢复"按钮
- 点击恢复按钮会弹出确认对话框
- 确认后执行
svn revert 操作
- 操作成功后自动刷新文件状态列表
界面布局优化
- 调整了按钮的样式和布局,使用更紧凑的设计
- 优化了文件状态显示的宽度和对齐方式
- 添加了按钮的 tooltip 提示文本
- 使用 grid 布局确保各列宽度合理分配
文件状态显示优化
- 根据不同的文件状态显示不同的颜色
- 添加了状态图标的 tooltip 提示
- 优化了状态文本的显示效果
4.1.2
- 完善单个文件上传流程
- 修改了提示词 加快了生成速度
- 增加了文件夹上传功能
1.0.0 - 正式版本
- [ ] 完整功能集
- [ ] 性能优化
- [ ] 用户体验改进
技术栈
- TypeScript
- VS Code Extension API
- SVN命令行工具集成
- OpenAI API(用于生成提交日志)
贡献指南
欢迎提交问题报告和功能请求。如果您想贡献代码,请先开issue讨论您想要更改的内容。
许可证
MIT
| |