SharpSvn:我怎样吃鸡怎么才能看到人更新()的结果

博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)使用 SharpSvn 执行 svn 操作的Demo - lienhua34 - 博客园
随笔 - 108, 文章 - 0, 评论 - 147, 引用 - 0
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 = //表示不信任该服务器,放弃访问。
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.E
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.E
client.Add(path, args);
3.3 提交 Commit
using (SvnClient client = new SvnClient())
SvnCommitArgs commitArgs = new SvnCommitArgs();
commitArgs.Depth = SvnDepth.E
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.E
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: 提交备注信息
SharpSvn 项目自身提供的 Demo 样例几乎没有,提供的文档对各个 API 介绍的少得可怜。之前因工作需要,在网上搜索也没有发现多少关于 SharpSvn 的样例介绍。上面这些只是自身因需要用到而进行验证得来的一些 demo 样例,后面就没有再更多得使用 SharpSvn,所以关于SharpSvn 的探索就这么浅薄了,也懒得再继续深入了。查看: 8497|回复: 3
C#使用SharpSVN的例子 更新 提交检查版本都俱全
[code=csharp]
public class SVNUtils
& && &&&public static bool C
& && &&&private readonly SvnClient SC;
& && &&&public SVNUtils()
& && && && &svnurl = &svn://127.0.0.1:& + TCS.Config.AppConfig.RunTime.SVNPort.ToString();
& && && && &SC = new SvnClient();
& && && && &SvnUriTarget rem = new SvnUriTarget(svnurl);
& && && && &SC.Authentication.ClearAuthenticationCache();
& && && && &SC.Authentication.Clear();
& && && && &SC.Authentication.DefaultCredentials = new SvnCredentialProvider(
& && && && && && &TCS.Config.AppConfig.RunTime.SVNUsername,
& && && && && && & TCS.Config.AppConfig.RunTime.SVNPassword,
& && && && && && &&&svnurl);//默认用户名密码
& && &&&public bool Commit()
& && && && &Console.WriteLine(&开始检查是否需要提交新参数表...&);
& && && && &SvnCommitArgs ca = new SvnCommitArgs();
& && && && &SvnStatusArgs sa = new SvnStatusArgs();
& && && && &Collection&SvnStatusEventArgs&
& && && && &SC.GetStatus(GetAppLoc(), sa, out statuses);
& && && && &int i = 0;
& && && && &foreach (var item in statuses)
& && && && &{
& && && && && & if (item.LocalContentStatus != item.RemoteContentStatus)
& && && && && & {
& && && && && && &&&i++;
& && && && && & }
& && && && && & if (!item.Versioned)
& && && && && & {
& && && && && && &&&SC.Add(item.FullPath);
& && && && && && &&&Console.WriteLine(&新增加文件& + item.FullPath);
& && && && && && &&&i++;
& && && && && & }
& && && && && & else if (item.Conflicted)
& && && && && & {
& && && && && && &&&SC.Resolve(item.FullPath, SvnAccept.Working);
& && && && && && &&&Console.WriteLine(&处理冲突文件& + item.FullPath);
& && && && && & }
& && && && && & else if (item.IsRemoteUpdated)
& && && && && & {
& && && && && && &&&SC.Update(item.FullPath);
& && && && && && &&&Console.WriteLine(&处理冲突文件& + item.FullPath);
& && && && && & }
& && && && && & else if (item.LocalContentStatus == SvnStatus.Missing)
& && && && && & {
& && && && && && &&&SC.Delete(item.FullPath);
& && && && && && &&&Console.WriteLine(&处理丢失文件& + item.FullPath);
& && && && && && &&&i++;
& && && && && & }
& && && && &}
& && && && &if (i & 0)
& && && && &{
& && && && && & ca.LogMessage = &&;
& && && && && & SvnCommitR
& && && && && & if (SC.Commit(GetAppLoc(), ca, out scr))
& && && && && & {
& && && && && && &&&Console.WriteLine(&提交完成&);
& && && && && & }
& && && && && & else
& && && && && & {
& && && && && && &&&Console.WriteLine(&提交失败&);
& && && && && & }
& && && && &}
& && && && &else
& && && && &{
& && && && && & Console.WriteLine(&无变化,无需检查&);
& && && && &}
& && && && &
& && &&&/// &summary&
& && &&&/// 获取本地工作副本svn路径
& && &&&/// &/summary&
& && &&&/// &returns&&/returns&
& && &&&public string GetAppLoc()
& && && && &return Comm.parentPath + Comm.issuedP
& && &&&/// &summary&
& && &&&/// 检查版本号,如果版本号不符, 则更新
& && &&&/// &/summary&
& && &&&/// &returns&&/returns&
& && &&&public bool CheckVer()
& && && && &bool result =
& && && && &var repos = new SvnUriTarget(svnurl);
& && && && &var local = new SvnPathTarget(GetAppLoc());
& && && && &try
& && && && &{
& && && && && & notiny = &正在检查服务器版本...&;
& && && && && & ShowInfo();
& && && && && & SvnInfoEventArgs serverI
& && && && && & bool oks = SC.GetInfo(repos, out serverInfo);
& && && && && & notiny = &正在检查本地版本...&;
& && && && && & ShowInfo();
& && && && && & SvnInfoEventArgs clientI
& && && && && & bool okc = SC.GetInfo(local, out clientInfo);
& && && && && & if (oks && okc) //如果客户端服务端都会成功, 则对比服务器版本, 否则返回true 执行更新命令
& && && && && & {
& && && && && && &&&result = (serverInfo.Revision & clientInfo.Revision);
& && && && && & }
& && && && && & ShowInfo(string.Format(&检查完毕,服务器版本{0}客户端版本{1}&,
& && && && && && && && && && && && && &(serverInfo != null ? serverInfo.Revision.ToString() : &(未知)&),
& && && && && && && && && && && && && &(clientInfo != null ? clientInfo.Revision.ToString() : &(未知)&)
& && && && && && && && && &&&));
& && && && &}
& && && && &catch (Exception)
& && && && &{
& && && && && & ShowInfo(&检查文件是出现错误...&);
& && && && &}
& && && && &
& && &&&/// &summary&
& && &&&/// 初始化 如果没有被管理,则签出
& && &&&/// &/summary&
& && &&&/// &returns&&/returns&
& && &&&public bool Init()
& && && && &ShowInfo(&正在初始化....&);
& && && && &bool result =
& && && && &HandEvents();
& && && && &if (!SvnTools.IsManagedPath(GetAppLoc()))//查看某目录是否是受svn管理的状态, 即是否为工作副本
& && && && &{
& && && && && & notiny = &正在检出文件.&;
& && && && && & ShowInfo();
& && && && && & result = SC.CheckOut(new SvnUriTarget(svnurl), GetAppLoc());
& && && && && & ShowInfo(&文件检出完成.&);
& && && && &}
& && && && &ShowInfo(&初始化完毕.&);
& && && && &
& && &&&/// &summary&
& && &&&/// 委托各种事件。
& && &&&/// &/summary&
& && &&&private void HandEvents()
& && && && &SC.Authentication.UserNamePasswordHandlers += Authentication_UserNamePasswordH
& && && && &SC.Authentication.UserNameHandlers += Authentication_UserNameH
& && && && &SC.Progress += SC_P
& && && && &SC.Processing += SC_P
& && && && &SC.Notify += SC_N
& && && && &SC.SvnError += SC_SvnE
& && && && &SC.Conflict += SC_C
& && && && &SC.Cancel += SC_C
& && && && &SC.Committed += SC_C
& && && && &SC.Committing += SC_C
& && &&&/// &summary&
& && &&&/// 提交过程
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&void SC_Committing(object sender, SvnCommittingEventArgs e)
& && && && &ShowInfo(&正在提交&);
& && &&&/// &summary&
& && &&&/// 提交完成后
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&void SC_Committed(object sender, SvnCommittedEventArgs e)
& && && && &ShowInfo(&提交完成& + e.Revision);
& && &&&/// &summary&
& && &&&/// 被取消
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&private void SC_Cancel(object sender, SvnCancelEventArgs e)
& && && && &e.Cancel = C
& && &&&/// &summary&
& && &&&/// 遇到文件冲突
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&private void SC_Conflict(object sender, SvnConflictEventArgs e)
& && && && &ShowInfo(&文件冲突& + e.ConflictReason.ToString());
& && &&&/// &summary&
& && &&&/// 任何svn错误可以在这处理,也可以在这里处理是否取消
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&private void SC_SvnError(object sender, SvnErrorEventArgs e)
& && && && &e.Cancel =
& && && && &WriteError(e.Exception);
& && &&&/// &summary&
& && &&&/// 输出错误
& && &&&/// &/summary&
& && &&&/// &param name=&e_Exception&&&/param&
& && &&&public void WriteError(Exception e_Exception)
& && && && &ShowInfo(e_Exception.Message + e_Exception.Source + &\r\n&
& && && && && && && &+ e_Exception.StackTrace + &\r\n&
& && && && && && && &);
& && &&&/// &summary&
& && &&&/// 处理某项操作
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&private void SC_Processing(object sender, SvnProcessingEventArgs e)
& && && && &Console.SetCursorPosition(0, Console.CursorTop);
& && && && &Console.Write(&正在处理操作& + e.CommandType.ToString() + &.......&);
& && &&&/// &summary&
& && &&&/// 处理过程,进度,,比如传送的字节数等显示
& && &&&/// &/summary&
& && &&&/// &param name=&sender&&&/param&
& && &&&/// &param name=&e&&&/param&
& && &&&private void SC_Progress(object sender, SvnProgressEventArgs e)
& && && && &if (e.Progress == 0)
& && && && &{
& && && && && & prog = &&;
& && && && &}
& && && && &else
& && && && &{
& && && && && & if (e.TotalProgress ==
& && && && && && &&&-1)
& && && && && & {
& && && && && && &&&if (e.Progress & 1024)
& && && && && && &&&{
& && && && && && && && &prog = ((float)(e.Progress) / 1024F).ToString(&0.00&) + &KB&;
& && && && && && &&&}
& && && && && && &&&else
& && && && && && &&&{
& && && && && && && && &prog = ((float)(e.Progress)).ToString(&0.00&) + &Bytes&;
& && && && && && &&&}
& && && && && & }
& && && && && & else
& && && && && & {
& && && && && && &&&prog = (e.Progress).ToString(&0.00&);
& && && && && & }
& && && && &}
& && && && &ShowInfo();
& && &&&public void ShowInfo()
& && && && &Console.SetCursorPosition(0, Console.CursorTop);
& && && && &Console.Write(notiny + (string.IsNullOrWhiteSpace(prog) ? && : &(& + prog + &)&));
& && &&&public void ShowInfo(string info)
& && && && &Console.WriteLine(info);
& && &&&public bool Update(int i)
& && && && &bool ok =
& && && && &try
& && && && &{
& && && && && & var sua = new SvnUpdateArgs { Revision = new SvnRevision(i) };
& && && && && & events();
& && && && && & ok = SC.CleanUp(GetAppLoc());
& && && && && & ok = SC.Update(GetAppLoc(), sua);
& && && && &}
& && && && &catch (Exception ex)
& && && && &{
& && && && && & ShowInfo(&更新时遇到问题:& + ex.Message + &\r\n&);
& && && && && & WriteError(ex);
& && && && &}
& && && && &ShowInfo(&更新完成....&);
& && && && &
& && &&&public bool Update()
& && && && &ShowInfo(&正在更新....&);
& && && && &SC.CleanUp(GetAppLoc());
& && && && &bool ok = SC.Update(GetAppLoc());
& && && && &if (!ok)
& && && && &{
& && && && && & ShowInfo(&未成功,正在清理...&);
& && && && && & SC.CleanUp(GetAppLoc());
& && && && && & ShowInfo(&清理完毕,正在更新....&);
& && && && && & ok = SC.Update(GetAppLoc());
& && && && && & if (!ok)
& && && && && & {
& && && && && && &&&ShowInfo(&正在撤销本地修改....&);
& && && && && && &&&SC.Revert(GetAppLoc());
& && && && && && &&&ShowInfo(&正在清理....&);
& && && && && && &&&SC.CleanUp(GetAppLoc());
& && && && && && &&&ShowInfo(&正在更新....&);
& && && && && && &&&ok = SC.Update(GetAppLoc());
& && && && && & }
& && && && &}
& && && && &ShowInfo(&更新操作完成&);
& && && && &
& && &&&private void Authentication_UserNameHandlers(object sender, SvnUserNameEventArgs e)
& && && && &e.UserName = TCS.Config.AppConfig.RunTime.SVNU
& && &&&private void Authentication_UserNamePasswordHandlers(object sender, SvnUserNamePasswordEventArgs e)
& && && && &e.Password = TCS.Config.AppConfig.RunTime.SVNP
& && && && &e.UserName = TCS.Config.AppConfig.RunTime.SVNU
& && &&&#region 提示信息
& && &&&private void SC_Notify(object sender, SvnNotifyEventArgs e)
& && && && &notiny = string.Format(&{0}:{1}.&, getstringact(e.Action), new FileInfo(e.FullPath).Name);
& && && && &ShowInfo();
& && &&&#endregion
& && &&&#region 提示信息中文对照
& && &&&public string getstringact(SvnNotifyAction act)
& && && && &string result =
& && && && &switch (act)
& && && && &{
& && && && && & case SvnNotifyAction.Add:
& && && && && && &&&result = &添加&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.BlameRevision:
& && && && && && &&&
& && && && && & case SvnNotifyAction.ChangeListClear:
& && && && && && &&&
& && && && && & case SvnNotifyAction.ChangeListMoved:
& && && && && && &&&
& && && && && & case SvnNotifyAction.ChangeListSet:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitAddCopy:
& && && && && && &&&result = &提交添加副本&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitAdded:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitDeleted:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitModified:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitReplaced:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitReplacedWithCopy:
& && && && && && &&&
& && && && && & case SvnNotifyAction.CommitSendData:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Copy:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Delete:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Excluded:
& && && && && && &&&result = &要排除&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.Exists:
& && && && && && &&&result = &已存在&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.ExternalFailed:
& && && && && && &&&result = &外部失败&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedConflict:
& && && && && && &&&result = &失败冲突&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedForbiddenByServer:
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedLocked:
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedMissing:
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedNoParent:
& && && && && && &&&
& && && && && & case SvnNotifyAction.FailedOutOfDate:
& && && && && && &&&result = &已过期且失败&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.FollowUrlRedirect:
& && && && && && &&&
& && && && && & case SvnNotifyAction.LockFailedLock:
& && && && && && &&&
& && && && && & case SvnNotifyAction.LockFailedUnlock:
& && && && && && &&&
& && && && && & case SvnNotifyAction.LockLocked:
& && && && && && &&&
& && && && && & case SvnNotifyAction.LockUnlocked:
& && && && && && &&&
& && && && && & case SvnNotifyAction.MergeBegin:
& && && && && && &&&
& && && && && & case SvnNotifyAction.MergeBeginForeign:
& && && && && && &&&
& && && && && & case SvnNotifyAction.MergeCompleted:
& && && && && && &&&
& && && && && & case SvnNotifyAction.NonExistentPath:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PatchApplied:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PatchAppliedHunk:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PatchFoundAlreadyApplied:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PatchRejectedHunk:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PropertyAdded:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PropertyDeleted:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PropertyDeletedNonExistent:
& && && && && && &&&
& && && && && & case SvnNotifyAction.PropertyModified:
& && && && && && &&&
& && && && && & case SvnNotifyAction.RecordMergeInfo:
& && && && && && &&&
& && && && && & case SvnNotifyAction.RecordMergeInfoElided:
& && && && && && &&&
& && && && && & case SvnNotifyAction.RecordMergeInfoStarted:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Resolved:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Restore:
& && && && && && &&&result = &恢复&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.Revert:
& && && && && && &&&result = &还原&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.RevertFailed:
& && && && && && &&&result = &还原失败&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.RevisionPropertyDeleted:
& && && && && && &&&
& && && && && & case SvnNotifyAction.RevisionPropertySet:
& && && && && && &&&
& && && && && & case SvnNotifyAction.Skip:
& && && && && && &&&result = &跳过&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.SkipConflicted:
& && && && && && &&&result = &跳过冲突&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.StatusCompleted:
& && && && && && &&&result = &状态已完成&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.StatusExternal:
& && && && && && &&&
& && && && && & case SvnNotifyAction.TreeConflict:
& && && && && && &&&result = &数冲突&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateAdd:
& && && && && && &&&result = &更新新增&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateCompleted:
& && && && && && &&&result = &更新已完成&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateDelete:
& && && && && && &&&result = &更新删除&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateExternal:
& && && && && && &&&result = &更新外部&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateExternalRemoved:
& && && && && && &&&result = &更新外部已删除&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateReplace:
& && && && && && &&&result = &更新替换&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateShadowedAdd:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateShadowedDelete:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateShadowedUpdate:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateSkipAccessDenied:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateSkipObstruction:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateSkipWorkingOnly:
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateStarted:
& && && && && && &&&result = &更新已开始&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpdateUpdate:
& && && && && && &&&result = &更新修改&;
& && && && && && &&&
& && && && && & case SvnNotifyAction.UpgradedDirectory:
& && && && && && &&&result = &更新目录&;
& && && && && && &&&
& && && && &}
& && && && &return result ?? (result = act.ToString());
& && &&&#endregion
:loveliness:&&
很好的帖子,支持下
如果楼主分享下期间开发的经验更好
请问TCS是什么?哪个命名空间的?
请问TCS是什么?哪个命名空间的?
这个是我的软件里面的 , 你可以不用。 可以去掉
Powered by

我要回帖

更多关于 桌面要刷新才能看到 的文章

 

随机推荐