來源: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));
}
}