目录
概述
第一部分:SharpSvn库介绍与基本使用
SharpSvn库概述
安装和配置SharpSvn
通过NuGet安装
手动安装
运行时配置
基本SVN操作
检出(Checkout)
判断工作副本状态
更新(Update)
提交(Commit)
导出(Export)
第二部分:SharpSvn高级功能
认证处理
远程操作(无需本地副本)
分支与合并
创建分支
合并分支
异常处理
第三部分:通过TortoiseSVN客户端操作SVN
TortoiseProc.exe基本用法
C#中调用TortoiseSVN
实用工具类
第四部分:性能优化与最佳实践
取消操作
获取SVN信息
清理与恢复
日志记录
第五部分:两种方法的比较与选择
SharpSvn的优势
TortoiseSVN的优势
选择建议
结论
在.NET开发环境中,与Subversion(SVN)版本控制系统交互主要有两种方式:一种是直接使用SharpSvn库提供的API,另一种是通过调用TortoiseSVN客户端程序(TortoiseProc.exe)。本文将全面介绍这两种方法,包括安装配置、基本操作、高级功能以及异常处理等内容。
SharpSvn是一个为.NET框架设计的开源库,它允许开发者通过C#代码直接与SVN服务器进行交互。该库提供了丰富的API,能够执行从基本的版本控制任务(如检出、提交、更新和添加文件)到更复杂的操作(如分支和合并)。
最简单的方式是通过NuGet包管理器安装SharpSvn:
// 在程序包管理器控制台中输入
NuGet\Install-Package SharpSvn.1.7-x86 -Version 1.7006.2206
安装完成后,项目中会自动添加对SharpSvn.dll的引用。
在app.config的configuration-startup节点下增加属性:
using SharpSvn;
SvnUriTarget target = new SvnUriTarget("http://svn.example.com/repos/project", "");
using (SvnClient client = new SvnClient())
{
client.Checkout(target, @"C:\temp\project");
}
// 方法1
public bool IsWorkingCopy(string path)
{
var uri = client.GetUriFromWorkingCopy(path);
return uri != null;
}
// 方法2
if (!SvnTools.IsManagedPath(localPath))
{
// 目录不受SVN管理
}
if (!IsWorkingCopy(localPath))
{
// 检出文件
client.CheckOut(new SvnUriTarget(onlineSVN), localPath);
}
using (SvnClient client = new SvnClient())
{
client.Update(@"C:\temp\project");
}
using (SvnClient client = new SvnClient())
{
SvnCommitArgs commitArgs = new SvnCommitArgs();
commitArgs.Depth = SvnDepth.Empty;
commitArgs.LogMessage = "My Test Commit";
SvnCommitResult commitResult = null;
client.Commit(@"d:\\svn\temp\test.txt", commitArgs, out commitResult);
}
SvnUriTarget remote = new SvnUriTarget(path); // svn路径
using (SvnClient client = new SvnClient())
{
if (!client.Export(remote, tarPath)) // 导出到指定路径(不带.svn目录)
{
return;
}
}
SharpSvn提供了灵活的认证机制:
using (SvnClient client = new SvnClient())
{
client.Authentication.Clear(); // 清除原有的账户信息
// 用户名密码认证
client.Authentication.UserNamePasswordHandlers +=
new EventHandler(
delegate (Object s, SharpSvn.Security.SvnUserNamePasswordEventArgs ee)
{
ee.UserName = "abc";
ee.Password = "defg";
});
// SSL服务器信任处理
client.Authentication.SslServerTrustHandlers +=
new Eve