亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用SharpSvn執行svn操作的Demo

2019-11-14 13:57:45
字體:
來源:轉載
供稿:網友

1. SharpSvn簡介

SharpSvn.dll 是為.Net 2.0-4.0+ 應用提供的 Subversion Client API,更多詳細介紹請見 https://sharpsvn.open.collab.net/。

2. 鑒權操作

SharpSvn 通過 Authentication 接口提供相關的鑒權操作,例如用戶名和密碼獲取、證書確認等。Authentication 接口分別為這些操作定義了相關的事件句柄(Handlers)。當需要某些鑒權操作時,SharpSvn 就會去調用相對應的句柄。我們只需要將我們需要執行的鑒權操作掛載到相對應的句柄上即可。下面各提供用戶名和密碼獲取、證書確認的例子。

2.1 用戶名和密碼獲取

當執行某個 svn 操作需要用戶權限認證時,會調用 UserNamePassWordHandlers 中的句柄來獲取用戶名和密碼。例如,

using (SvnClient client = new SvnClient()){    client.Authentication.UserNamePasswordHandlers +=        new EventHandlers<SvnUserNamePasswordEventArgs>(            delegate (object s, SvnUserNamePasswordEventArgs e)            {                e.UserName = "test";                e.Password = "password";            });} 

2.2 證書確認

當我們訪問的 Svn 服務器使用的協議不是我們默認執行標準,svn 客戶會讓用戶確認這個服務器是否值得信任并繼續訪問。此時,SharpSvn 會執行 Authentication 接口中的 SslServerTrustHandlers 中掛載的事件句柄。例如,

using (SvnClient client = new SvnClient()){    client.Authentication.SslServerTrustHandlers +=        delegate (object s, SvnSslServerTrustEventHandlerArgs> e)        {            e.Save = true;            //e.Cancel = true; //表示不信任該服務器,放棄訪問。        };}

2.3 SharpSvnUI綁定

SharpSvn.UI.dll 提供了一個默認的操作界面。例如上面的用戶名和密碼獲取界面、證書確認界面。我們只需要將下面這兩行代碼寫入我們程序中,SharpSvn 會自動掛載相對應的事件句柄。當需要用戶名和密碼獲取或者證書確認時就會彈出相對應的界面。

using (SvnClient client = new SvnClient()){    SharpSvn.UI.SvnUIBindArgs uiBindArgs = new SharpSvn.UI.SvnUIBindArgs();    SharpSvn.UI.SvnUI.Bind(client, uiBindArgs);}

3 SVN基本操作

3.1 更新 Update

using (SvnClient client = new SvnClient()){    string path = @”d://svn/temp";    SvnUpdateArgs updateArgs = new SvnUpdateArgs();    updateArgs.Depth = SvnDepth.Empty;    client.Update(path, updateArgs);}

3.2加入版本控制 Add

using (SvnClient client = new SvnClient()){    string path = @"d://svn/temp/new.txt";    SvnAddArgs args = new SvnAddArgs();    args.Depth = SvnDepth.Empty;    client.Add(path, args);}

3.3 提交 Commit

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);}


其他操作,例如 Delete、Lock、Unlock 等,這些基本操作的代碼結構跟上面這幾個操作類似,這里就不贅述了。

3.4 獲取本更文件列

using (SvnClient client = new SvnClient()){    SvnStatusArgs args = new SvnStatusArgs();    args.Depth = SvnDepth.Empty;    args.RetriveRemoteStatus = false;    Collection<SvnStatusEventArgs> list = new Collection<SvnStatusEventArgs>();    client.GetStatus(@"d://svn/temp", args, out list);    foreach (SvnStatusEventArgs eventArgs in list)    {        //從eventArgs中獲取每個變更文件的相關信息    }}

4 SharpSvn 操作日志獲取

通過 SvnClientReporter 可以將 SharpSvn 的操作日志信息進行重定向,可以重定向到一個 StringBuilder 或者某個文件中,下面的這兩行代碼SharpSvn 重定向到某個 StringBuilder 中,

using (SvnClient client = new SvnClient()){    StringBuilder strBuilder = new StringBuilder();    SvnClientReporter reporter = new SvnClientReporter(client, strBuilder);}

注:SharpSvn 可重定向到多個目標,可一個多次重定向到同一個目標。例如,如果對于同一個 StringBuilder,定義了多個 SvnClientReporter 對象,則該 StringBuilder 中的 SharpSvn 操作日志會記錄多份。可以手工調用SvnClientReporter 對象的 Dispose()釋放某個日志重定向。

5 取消操作

SharpSvn 的取消機制類似與線程的取消機制。SharpSvn 的操作過程中會有一些取消檢測點。當操作執行到某個檢測點時會判斷一下用戶是否設置了取消標志,如果沒有,則繼續操作;如果設置了取消標志,則終止當前操作。

在 SharpSvn 的操作過程中,當到達一個取消檢測點時會處罰一個Cancel 事件,通過 Cancel 事件來獲取用戶是否設置了取消標志。當我們要取消 svn 操作時,注冊一下 Cancel 事件處理方法,則改方法中設置SvnCancelEventArgs 對象的 Cancel 屬性為 true 即可。例如,

using (SvnClient client = new SvnClient()){    //do something    client.Cancel +=        delegate (object s, SvnCancelEventArgs e)        {            e.Cancel = true;        };    //do svn Operations}

6 Svn 遠程會話 SvnRemotesession


通過提供的一個 Svn 控制元素路徑可以即可建立一個 Svn 遠程會話SvnRemoteSession,

string elementPath = @"https://10.23.34.45:6801/svn/temp/test.txt";SvnRemoteSession remoteSession = new SvnRemoteSession(new Uri(elementPath));

調用 SvnRemoteSession 對象的 GetRepositoryRoot() 方法可以獲取當前svn 配置庫服務器的根目錄,

Uri repoRootUri = null;remoteSession.GetRepositoryRoot(out repoRootUri);

獲取到 svn 配置庫的根目錄之后,我們就可以調用 Reparent() 方法將SvnRemoteSession 會話對象設置到 svn 配置庫的根,

remoteSession.Reparent(repoRootUri);

將遠程會話設置到 svn 配置庫根目錄之后,我們就可以各個配置庫元素執行相關的遠程操作,例如列出某個配置庫目錄下的所有元素、獲取當前配置庫的最新版本號、獲取某個元素的提交記錄等。下面分別給出這三個操作的例子,

6.1 列出目錄下的所有元素(非遞歸)

string dirPath = @"https://10.23.34.45:6801/svn/temp";string dirRelPath = remoteSession.MakeRepositoryRootRelativePath(new Uri(dirPath)); //獲取相對目錄相對配置庫根目錄的相對路徑remoteSession.List(dirRelPath,    new EventHandler<SvnRemoteListEventArgs>(        delegate (object s, SvnRemoteListEventArgs e)        {            //e.Name: 元素名            //e.Path: 元素路徑            //e.RetrievedRevistion: 元素的版本號        }));

6.2 獲取配置庫最新版本號

long latestRevision = 0;remoetSession.GetLatestRevision(out latestRevision);

6.3 獲取指定文件的提交記錄

Uri fileUri = new Uri(@"https://10.23.34.45:6801/svn/temp/test.txt");string fileRelPath = remoteSession.MakeRepositoryRootRelativePath(fileUri);    delegate (object s, SvnRemoteLogEventArgs e)    {        //e.Author: 提交人        //e.Revision: 版本號        //e.LogMessage: 提交備注信息    }));

7 結束語

SharpSvn 項目自身提供的 Demo 樣例幾乎沒有,提供的文檔對各個 API 介紹的少得可憐。之前因工作需要,在網上搜索也沒有發現多少關于 SharpSvn 的樣例介紹。上面這些只是自身因需要用到而進行驗證得來的一些 demo 樣例,后面就沒有再更多得使用 SharpSvn,所以關于SharpSvn 的探索就這么淺薄了,也懶得再繼續深入了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
菠萝蜜影院一区二区免费| 亚州成人av在线| 亚洲男人天堂视频| 亚洲欧美成人网| 日韩av免费看网站| 欧美性猛交xxxx免费看漫画| 亚洲精品一区二区三区不| 欧美最近摘花xxxx摘花| 亚洲美腿欧美激情另类| 一二美女精品欧洲| 日本一区二区不卡| 日韩欧亚中文在线| 国产精品色视频| 人人做人人澡人人爽欧美| 成人a视频在线观看| 清纯唯美亚洲综合| 欧美亚洲在线视频| 欧美激情国产日韩精品一区18| 日韩视频亚洲视频| 好吊成人免视频| 91精品国产91久久久久| 色综合伊人色综合网站| 97成人超碰免| 中文字幕一区二区三区电影| 夜夜嗨av一区二区三区免费区| 一本色道久久综合狠狠躁篇怎么玩| 国产精品久久久久不卡| 亚洲女人天堂av| 亚洲精品一区二区在线| 中文字幕欧美日韩在线| 久热精品视频在线免费观看| 大荫蒂欧美视频另类xxxx| 亚洲欧美三级伦理| 亚洲人av在线影院| 91精品国产自产在线| 国产成人久久精品| 4444欧美成人kkkk| 26uuu日韩精品一区二区| 亚洲精品91美女久久久久久久| 国产伊人精品在线| 欧美极品美女视频网站在线观看免费| 亚洲激情视频网站| 欧美最近摘花xxxx摘花| 久久久999国产精品| 欧美日韩一区二区免费视频| 欧美色另类天堂2015| 在线观看日韩视频| 欧美日韩国产精品一区二区三区四区| 日韩成人av在线播放| 97视频在线观看成人| 自拍偷拍亚洲一区| 日韩精品久久久久久福利| 欧美精品videofree1080p| 欧美日韩美女在线观看| 亚洲欧美另类在线观看| 欧美亚洲另类在线| 欧美精品在线视频观看| 欧美日韩不卡合集视频| 欧美电影免费看| 欧美在线视频一区二区| 亚洲精品一区久久久久久| 亚洲的天堂在线中文字幕| 亚洲aa中文字幕| 日本精品视频网站| 久久久女女女女999久久| 亚洲最新av在线网站| 久久在线视频在线| 亚洲精品日韩在线| 久久久久久久一区二区三区| 日韩免费电影在线观看| 久久99精品久久久久久琪琪| 欧美性精品220| 欧美性xxxx18| 91在线免费视频| 日韩高清电影好看的电视剧电影| 日韩精品视频免费| 国产性猛交xxxx免费看久久| 青青青国产精品一区二区| 亚洲欧美中文另类| 九九热精品视频| 成人xxxx视频| 亚洲欧美另类中文字幕| 欧美一区在线直播| 国产日韩欧美在线播放| 国产精品丝袜久久久久久不卡| 欧美日韩午夜激情| 久久久爽爽爽美女图片| 1769国内精品视频在线播放| 欧美一级大胆视频| 欧美在线观看网站| 久久福利视频网| 一本色道久久综合狠狠躁篇的优点| 欧美中文字幕在线视频| 大量国产精品视频| 日韩高清电影免费观看完整版| 在线激情影院一区| www.午夜精品| 亚洲国产精品视频在线观看| 午夜精品久久久久久99热软件| 国产精品第二页| 欧美成aaa人片在线观看蜜臀| 亚洲国产91精品在线观看| 欧洲成人免费aa| 久久韩国免费视频| 青青草国产精品一区二区| 欧美中文字幕视频在线观看| 北条麻妃一区二区三区中文字幕| 国产成人精品一区二区| 国产一区二中文字幕在线看| 欧美日韩免费一区| 欧美高清不卡在线| 伊人久久久久久久久久久久久| 九色成人免费视频| 成人精品aaaa网站| 91精品国产综合久久久久久蜜臀| 亚洲精品电影在线| 亚洲毛片在线免费观看| 国外成人性视频| 成人高清视频观看www| 亚洲在线免费视频| 欧美亚洲另类在线| 中文欧美日本在线资源| 中文字幕国产精品久久| 亚洲精品电影久久久| 亚洲综合中文字幕在线观看| 亚洲国产精品电影| 狠狠色香婷婷久久亚洲精品| 欧美精品一区二区三区国产精品| 国产自产女人91一区在线观看| 国产一区视频在线| 日韩精品在线免费观看| 正在播放欧美视频| 亚洲国产另类久久精品| 国产精品偷伦视频免费观看国产| 91久久精品日日躁夜夜躁国产| 精品人伦一区二区三区蜜桃免费| 中文字幕成人精品久久不卡| 26uuu另类亚洲欧美日本一| 一区二区国产精品视频| 久久在精品线影院精品国产| 欧美亚洲另类激情另类| 91av在线不卡| 国产xxx69麻豆国语对白| 欧美成人激情视频免费观看| 久久艹在线视频| 亚洲精品国精品久久99热| 国产视频精品在线| 欧美高清视频在线| 久久久久久久91| 欧美成人四级hd版| 国产精品极品美女在线观看免费| 一区二区三区在线播放欧美| 国产精品久久久久999| 欧美日韩另类在线| 中文字幕无线精品亚洲乱码一区| www高清在线视频日韩欧美| 久久躁日日躁aaaaxxxx| 国产第一区电影| 亚洲电影在线观看| 欧美影院久久久| 久久综合久久八八| 欧美激情一区二区三区成人| 成人免费黄色网| 中文字幕av一区中文字幕天堂|