在我自己最初使用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对应的操作(如:UpdateCommitImport)

        定义了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开头的方法,如:RemoteDeleteRemoteImprotRemoteMove等的。这些由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简单的几种用法。其实很多方法,可以通过对象浏览器查看然后调用的。希望能对大家有点帮助。