如何在SharpSVN中获取指定起始修订号至最新版本的日志?
解决SharpSVN获取指定起始到最新版本日志的问题
你现在的代码只设置了Start=128,但SharpSVN默认会从这个版本开始往更早的版本回溯,所以会返回整个仓库的所有历史日志。要实现从指定起始版本到最新版本的日志获取,只需要明确指定日志的范围即可,下面是具体的修改方案:
直接指定范围到最新版本(推荐)
利用SvnRevision.Head直接代表仓库的最新修订号,通过SvnRevisionRange来限定日志的起止范围,同时可以控制日志的输出顺序:
using(SvnClient client = new SvnClient()) { Collection<SvnLogEventArgs> list; // 你的起始修订号 long targetStartRev = 128; // 创建日志参数,指定从targetStartRev到最新版本(HEAD)的范围 SvnLogArgs logArgs = new SvnLogArgs(new SvnRevisionRange(targetStartRev, SvnRevision.Head)) { // 设置为true,日志会按「旧版本到新版本」的顺序输出;默认是从新到旧 Forward = true }; // 调用GetLog获取指定范围的日志 client.GetLog(new Uri("http://my/repository"), logArgs, out list); // 遍历输出日志详情 foreach(SvnLogEventArgs logItem in list) { Console.WriteLine("=== r{0} : {1} ===", logItem.Revision, logItem.Author); Console.WriteLine(logItem.LogMessage); Console.WriteLine("------------------------"); } }
另一种方式:先获取最新修订号再设置范围
如果你需要先拿到最新修订号做其他处理,可以先调用GetInfo获取仓库信息,再指定范围:
using(SvnClient client = new SvnClient()) { Collection<SvnLogEventArgs> list; long targetStartRev = 128; // 获取仓库最新修订号 SvnInfoEventArgs repoInfo; client.GetInfo(new Uri("http://my/repository"), out repoInfo); long latestRev = repoInfo.Revision; // 设置日志参数的起止版本 SvnLogArgs logArgs = new SvnLogArgs { Start = targetStartRev, End = latestRev, Forward = true // 按旧到新顺序输出 }; client.GetLog(new Uri("http://my/repository"), logArgs, out list); // 输出日志 foreach(SvnLogEventArgs logItem in list) { Console.WriteLine("=== r{0} : {1} ===", logItem.Revision, logItem.Author); Console.WriteLine(logItem.LogMessage); Console.WriteLine("------------------------"); } }
关键说明
SvnRevision.Head是SharpSVN提供的常量,直接指向仓库当前的最新修订号,无需手动获取,使用起来更简洁。Forward属性控制日志的输出顺序:设为true时从起始版本到最新版本顺序输出,默认false是从最新到起始版本逆序输出,你可以根据需求调整。
内容的提问来源于stack exchange,提问作者sambhav jain
相关产品推荐
相关产品推荐

