返回市场
mcp-版本控制

mcp-版本控制

作者:gcorroto7 星标更新:2025-11-06

项目介绍

技术文档摘要

SVN MCP 服务器

一个完整的MCP(模型上下文协议)服务器,用于与Subversion(SVN)集成,旨在使AI代理能够高效地管理SVN仓库。

🎯 特性

  • 基本仓库操作:信息、状态、日志、差异、检出、更新
  • 文件管理:添加、提交、删除、回退
  • 维护工具:清理
  • 🔄 分支管理(待开发)
  • 🔄 高级操作:合并、切换、属性(开发中)
  • 🔄 分析工具:归责、冲突检测(开发中)
  • 🔄 批量操作(开发中)

📋 要求

  • Node.js >= 18.0.0
  • Subversion (SVN) 已安装并可在PATH中找到
  • TypeScript(用于开发)

🔍 检测SVN安装

验证SVN是否已安装

# 基本命令验证SVN
svn --version

# 验证可执行文件的完整路径
where svn        # Windows
which svn        # Linux/Mac

# 验证完整的SVN客户端
svn --version --verbose

如果SVN正确安装,预期输出:

svn, version 1.14.x (r1876290)
   compiled Apr 13 2023, 17:22:07 on x86_64-pc-mingw32

Copyright (C) 2023 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

❌ 如果未安装SVN,常见的错误:

# Windows
'svn' 不是内部或外部命令

# Linux/Mac  
svn: 命令未找到
bash: svn: 命令未找到

🛠️ 进一步诊断

# 验证系统PATH
echo $PATH                    # Linux/Mac
echo %PATH%                   # Windows CMD
$env:PATH                     # Windows PowerShell

# 在系统中查找SVN可执行文件
find / -name "svn" 2>/dev/null           # Linux
Get-ChildItem -Path C:\ -Name "svn.exe" -Recurse -ErrorAction SilentlyContinue  # Windows PowerShell

# 验证客户端的具体版本
svn --version | head -1       # 只获取第一行版本信息

💾 在Windows上安装SVN

选项1:包管理器

# 使用Chocolatey(推荐)
choco install subversion

# 使用winget
winget install CollabNet.Subversion

# 使用Scoop
scoop install subversion

选项2:官方安装程序

  1. TortoiseSVN(包括命令行客户端):

    https://tortoisesvn.net/downloads.html
    ✅ 包括GUI和CLI客户端
    ✅ 与Windows资源管理器集成
    
  2. SlikSVN(仅命令行):

    https://sliksvn.com/download/
    ✅ 轻量级(仅CLI)
    ✅ 适合自动化
    
  3. CollabNet Subversion

    https://www.collab.net/downloads/subversion
    ✅ 企业版
    ✅ 提供商业支持
    

选项3:Visual Studio 或 Git for Windows

# 如果已安装Git for Windows,可能包含SVN
git svn --version

# Visual Studio也可能包含SVN
# 前往:Visual Studio Installer > 修改 > 单个组件 > Subversion

🐧 在Linux上安装SVN

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install subversion

# CentOS/RHEL/Fedora
sudo yum install subversion        # CentOS 7
sudo dnf install subversion        # CentOS 8/Fedora

# Arch Linux
sudo pacman -S subversion

# Alpine Linux
sudo apk add subversion

在macOS上安装SVN

# Homebrew(推荐)
brew install subversion

# MacPorts
sudo port install subversion

# 从Xcode Command Line Tools(可能已包含)
xcode-select --install

🔧 安装后配置SVN

验证全局配置

# 查看当前配置
svn config --list

# 设置全局用户
svn config --global auth:username 你的用户名

# 设置默认编辑器
svn config --global editor "code --wait"     # VS Code
svn config --global editor "notepad"         # Windows记事本
svn config --global editor "nano"            # Linux/Mac nano

验证对仓库的访问

# 测试连接到仓库(不进行检出)
svn list https://svn.ejemplo.com/repo/trunk

# 使用特定凭据测试
svn list https://svn.ejemplo.com/repo/trunk --username 用户名 --password 密码

🚀 安装

从NPM

npm install -g @grec0/mcp-svn

本地开发

git clone https://github.com/gcorroto/mcp-svn.git
cd mcp-svn
npm install
npm run build

⚙️ 配置

环境变量

变量描述默认值
SVN_PATHSVN可执行文件路径svn
SVN_WORKING_DIRECTORY工作目录process.cwd()
SVN_USERNAME认证用户-
SVN_PASSWORD认证密码-
SVN_TIMEOUT超时时间(毫秒)30000

示例MCP配置

{
  "mcpServers": {
    "svn": {
      "command": "npx",
      "args": ["@grec0/mcp-svn"],
      "env": {
        "SVN_PATH": "svn",
        "SVN_WORKING_DIRECTORY": "/path/to/working/copy",
        "SVN_USERNAME": "你的用户名",
        "SVN_PASSWORD": "你的密码"
      }
    }
  }
}

🛠️ 可用工具

基本操作

svn_health_check

检查SVN系统和工作副本的健康状况。

svn_health_check()

svn_info

从工作副本或特定文件获取详细信息。

svn_info(路径?: 字符串)

svn_status

查看工作副本中文件的状态。

svn_status(路径?: 字符串, 显示所有?: 布尔值)

svn_log

查看仓库的提交历史。

svn_log(路径?: 字符串, 限制?: 数字, 版本?: 字符串)

svn_diff

比较文件版本之间的差异。

svn_diff(路径?: 字符串, 旧版本?: 字符串, 新版本?: 字符串)

仓库操作

svn_checkout

检出SVN仓库。

svn_checkout(
  地址: 字符串,
  路径?: 字符串,
  版本?: 数字 | "HEAD",
  深度?: "empty" | "files" | "immediates" | "infinity",
  强制?: 布尔值,
  忽略外部?: 布尔值
)

svn_update

从仓库更新工作副本。

svn_update(
  路径?: 字符串,
  版本?: 数字 | "HEAD" | "BASE" | "COMMITTED" | "PREV",
  强制?: 布尔值,
  忽略外部?: 布尔值,
  接受冲突?: "postpone" | "base" | "mine-conflict" | "theirs-conflict" | "mine-full" | "theirs-full"
)

文件管理

svn_add

将文件添加到版本控制。

svn_add(
  路径: 字符串 | 字符串[],
  强制?: 布尔值,
  不忽略?: 布尔值,
  父级?: 布尔值,
  自动属性?: 布尔值,
  不自动属性?: 布尔值
)

svn_commit

确认对仓库的更改。

svn_commit(
  消息: 字符串,
  路径?: 字符串[],
  文件?: 字符串,
  强制?: 布尔值,
  保持锁定?: 布尔值,
  不解锁?: 布尔值
)

svn_delete

删除版本控制文件。

svn_delete(
  路径: 字符串 | 字符串[],
  消息?: 字符串,
  强制?: 布尔值,
  保留本地?: 布尔值
)

svn_revert

撤销文件的本地更改。

svn_revert(路径: 字符串 | 字符串[])

维护工具

svn_cleanup

清理工作副本中的中断操作。

svn_cleanup(路径?: 字符串)

📖 使用示例

检查系统状态

// 验证SVN可用且工作副本有效
const healthCheck = await svn_health_check();

获取仓库信息

// 工作副本的总体信息
const info = await svn_info();

// 特定文件的信息
const fileInfo = await svn_info("src/main.js");

检查文件状态

// 所有文件的状态
const status = await svn_status();

// 包含远程信息的状态
const fullStatus = await svn_status(null, true);

检出仓库

const checkout = await svn_checkout(
  "https://svn.example.com/repo/trunk",
  "local-copy",
  "HEAD",
  "infinity",
  false,
  false
);

确认更改

// 添加文件
await svn_add(["src/new-file.js", "docs/readme.md"], { 父级: true });

// 提交
await svn_commit(
  "添加新功能和文档",
  ["src/new-file.js", "docs/readme.md"]
);

🧪 测试

# 运行测试
npm test

# 带覆盖率的测试
npm run test -- --coverage

# 监视模式下的测试
npm run test -- --watch

🏗️ 开发

可用脚本

# 编译TypeScript
npm run build

# 开发模式
npm run dev

# 监视模式
npm run watch

# MCP调试器
npm run inspector

# 测试
npm test

# 发布新版本
npm run release:patch
npm run release:minor
npm run release:major

项目结构

svn-mcp/
├── package.json
├── tsconfig.json
├── jest.config.js
├── index.ts
├── common/
│   ├── types.ts      # TypeScript类型
│   ├── utils.ts      # SVN实用工具
│   └── version.ts    # 包版本
├── tools/
│   └── svn-service.ts # 主要SVN服务
├── tests/
│   └── integration.test.ts # 集成测试
└── README.md

📊 开发状态

查看文件基于上述信息,执行以下指令:您是一位专业的翻译人员,负责将英文内容翻译成英文内容。请帮我翻译原始内容。以获取完整的实现清单。

当前进度: 第一阶段完成(基本操作)✅

下一步:

  • 分支管理
  • 高级操作(合并、切换)
  • 分析工具
  • 批量操作

🐛 故障排除

未找到SVN

错误:系统PATH中未找到SVN

解决方案: 安装SVN并确保它在系统PATH中。

不是工作副本

错误:无法获取SVN信息:svn:警告:W155007:'.'不是工作副本

解决方案: 导航到SVN的工作副本目录或先执行检出。

认证问题

错误:svn: E170001:认证失败

解决方案: 配置环境变量SVN_USERNAMESVN_PASSWORD

长时间操作超时

错误:命令超时30000毫秒

解决方案: 增加SVN_TIMEOUT的值。

许可证

MIT许可证 - 详情见LICENSE

🤝 贡献

  1. 分叉项目
  2. 创建特性分支(git checkout -b feature/nueva-caracteristica
  3. 提交更改(git commit -am '添加新特性'
  4. 推送到分支(git push origin feature/nueva-caracteristica
  5. 创建拉取请求

📞 支持