c# sharpsvn 客户端开发记录
来源:http://www.macaihong.net/zuochanzi/59784_988955.html
判断文件夹是否是 working copy 工作副本两个方法
if (!IsWorkingCopy(localPath))//查看某目录是否是受svn管理的状态, 即是否为工作副本
{
notiny = "正在检出文件.";
ShowInfo();
result = client.CheckOut(new SvnUriTarget(onlineSVN), localPath);
ShowInfo("文件检出完成.");
}
if (!SvnTools.IsManagedPath(localPath))//查看某目录是否是受svn管理的状态, 即是否为工作副本
{
notiny = "正在检出文件.";
ShowInfo();
result = client.CheckOut(new SvnUriTarget(onlineSVN), localPath);
ShowInfo("文件检出完成.");
}
public bool IsWorkingCopy(string path)
{
var uri = client.GetUriFromWorkingCopy(path);
return uri != null;
}
==============================
SharpSvn使用说明
来源:https://blog.51cto.com/xiweicheng/923476
在我自己最初使用SharpSvn的时候,在网上找了 很久,很少相应的中文介绍的。这里就我个人的使用心得,简单介绍下SharpSvn的使用。
一般来说,在调用Svn去做一下操作时,主要有两种方式:一种就是调用Svn自带的svn.exe命令行,另外一种就是调用Svn API接口的方式。
对于Svn.exe,是需要本地安装有Svn服务或者是要远程调用服务器种的svn.exe,这种方式可以自己定义方法的内容,但是要熟悉svn相应的操作命令。这里不多介绍,本文主要是介绍Svn API接口的方式的其中一种现成的接口SharpSvn的使用。
关于SharpSvn接口,可以到SharpSvn的主页:http://sharpsvn.open.collab.net/下载。
下面进入正题。
1、 加载SharpSvn
下载好SharpSvn后,可以在程序里面加载进去了。加载方法跟加载其它的接口一样,只需要在解决方案里面的引用种添加引用,然后选择下载的SharpSvn.dll,就可以加载进去了。
2、 SharpSvn基本操作
首先,需要在代码前面使用using SharpSvn;
然后,下面通过一段代码来说明SharpSvn的使用:
using (SvnClient client = new SvnClient())
{
string strRepoUri = "http://localhost:8080/svn/test"; //Svn地址
string strLocalUri = "D:\\SvnTest\\"; //本地副本地址
SvnInfoEventArgs info; //Info参数
client.GetInfo(new Uri(strRepoUri),out info); //调用GetInfo()方法
Console.WriteLine(info.Reversion.toString()); //输出版本
SvnImportArgs importArgs = new SvnImportArgs(); //Import参数
importArgs.LogMessage = "Improt Test"; //Import时的日志信息
client.Improt(strLocatUri + "test.txt",new Uri(strRepoUri), importArgs); //执行Svn 的Import命令
client.Update(strLocalUri);
}
通过上面的代码可以看出,所有的SharpSvn方法,都是通过定义SvnClient的对象来调用的。这个是一个虚拟客户端,可以让你在本地不用安装Svn客户端工具而直接操作Svn对应的操作(如:Update、Commit、Import等)。
定义了SvnClient对象后,你就可以通过SvnClient对象(client)直接调用对应的函数进行你想要的操作了。
至于SharpSvn包含有什么函数,可以在对象浏览器中查看的。
3、 SharpSvn鉴权操作
SharpSvn鉴权操作,是通过SvnClient.Authentication接口实现的。
using (SvnClient client = new SvnClient())
{
client.Authentication.Clear(); //清除原有的账户信息
//重新设定账户信息
Client.Authentication.UserNamePasswordHandlers += new EventHandler<SharpSvn.Security.SvnUserNamePasswordEventArgs>(delegate(object s,SharpSvn.Security.SvnUserNamePasswordEventArgs e))
{
e.UserName = "test";
e.Password = "test";
}
}
上面代码是后台固定的账户密码的,在操作界面没法改变。
如果要在操作界面上动态输入账户密码,则需设定一个账户密码输入的界面即可。
4、 SharpSvn异常处理
using (SvnClient client = new SvnClient())
{
string strRepoUri = "http://localhost:8080/svn/test"; //Svn地址
string strLocalUri = "D:\\SvnTest\\"; //本地副本地址
SvnImportArgs importArgs = new SvnImportArgs(); //Import参数
importArgs.LogMessage = "Improt Test"; //Import时的日志信息
client.Improt(strLocatUri + "test.txt",new Uri(strRepoUri), importArgs); //执行Svn 的Import命令
//异常捕获和处理
importArgs.SvnError += new EventHandler<SvnErrorEventArgs> (delegate(object sender, SvnErrorEventArgs e))
{
//若文件已经存在
if(e.Exception.SvnErrorCode == SvnErrorCode.SVN_ERR_ENTRY_EXISTS)
{
Console.WriteLine("Exists!!");
}
}
}
SharpSvn自带的枚举(SvnErrorCode.SVN_ERR_ENTRY_EXISTS)有很多异常类型,可以通过错误码(SvnErrorCode)来区分是那种异常。然后做出你想要的处理方式。
5、 没有本地副本的SharpSvn操作
前面的介绍,都是要在本地有Svn的本地副本目录才能操作的。下面介绍不用本地副本,直接操作Svn服务的方法。
SharpSvn接口中,SvnClient类定义了很多的由Remote开头的方法,如:RemoteDelete、RemoteImprot、RemoteMove等的。这些由Remote开头的方法,就可以让你没有本地副本而操作Svn。
using (SvnClient client = new SvnClient())
{
//删除文件
SvnDeleteArgs deleteArgs = new SvnDeleteArgs();
deleteArgs.LogMessage = "RemoteDelete Test";
client.RemoteDelete(new Uri(strRepoUri + "//test.txt"), deleteArgs);
//创建Svn目录
SvnCreateDirectoryArgs createArgs = new SvnCreateDirectoryArgs();
createArgs.LogMessage = "Create Directory Test.";
client.RemoteCreateDirectory(new Uri(strRepoUri + "//test") ,createArgs);
}
上面都是一些SharpSvn简单的几种用法。其实很多方法,可以通过对象浏览器查看然后调用的。希望能对大家有点帮助。
=======================
使用SharpSvn方便调用svn
来源:https://blog.51cto.com/xiweicheng/923477
需要调用svn去做一些操作时,有两种方式:调用svn.exe命令行和调用svn api接口。我不太喜欢调用命令行的方式,是因为它需要依赖一个外部的exe程序,同时,为了得到命令执行结果,还需要去捕捉命令行的输出控制台,然后去解析,使得不太可靠。因此,我选择了调用svn接口的方式,因为我使用的是c#,有一个现成的第三方包装的库SharpSvn可以调用。
SharpSvn主页:
http://sharpsvn.open.collab.net/
使用起来很简单,下面是一个例子:
static void Main(string[] args)
{
using (SvnClient client = new SvnClient())
{
SvnInfoEventArgs serverInfo;
SvnInfoEventArgs clientInfo;
SvnUriTarget repos = new SvnUriTarget("http://svn.test.com/demo");
SvnPathTarget local = new SvnPathTarget(@"d:\Work\Code\demo");
client.GetInfo(repos, out serverInfo);
client.GetInfo(local, out clientInfo);
string path = @"d:\Work\Code\Demo";
client.CleanUp(path);
client.Revert(path);
client.Update(path);
Console.WriteLine(string.Format("serverInfo revision of {0} is {1}", repos, serverInfo.Revision));
Console.WriteLine(string.Format("clientInfo revision of {0} is {1}", local, clientInfo.Revision));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步