如何获取svn日志消息 使用(SvnClient client=new SvnClient()) { 提交(_targetPath,commitArgs); svninfeventargs结果; client.GetInfo(_targetPath,out result); SvnLogArgs args=新的SvnLogArgs(); args.Start=new SvnRevision(result.L修订); args.End=新的SvnRevision(结果修订版); 收集资料; GetLog(_targetPath,args,out logitems); foreach(登录项中的SvnLogEventArgs日志条目) { 字符串author=logentry.author; 字符串消息=logentry.LogMessage; DateTime checkindate=logentry.Time; AddMessage(string.Format(“由{0}在{1}上成功提交的消息:{2}”,作者,checkindate,消息)); } }
这是我的代码,但我只能得到一个日志条目,它应该是修订范围内所有日志的路径,有什么问题吗?我不知道有关此api的任何信息,但看起来您调用的GetLog的范围介于上次更改修订和当前修订之间。本能地,我认为根据定义,这只是一个日志条目如何获取svn日志消息 使用(SvnClient client=new SvnClient()) { 提交(_targetPath,commitArgs); svninfeventargs结果; client.GetInfo(_targetPath,out result); SvnLogArgs args=新的SvnLogArgs(); args.Start=new SvnRevision(result.L修订); args.End=新的SvnRevision(结果修订版); 收集资料; GetLog(_targetPath,args,out logitems); foreach(登录项中的SvnLogEventArgs日志条目) { 字符串author=logentry.author; 字符串消息=logentry.LogMessage; DateTime checkindate=logentry.Time; AddMessage(string.Format(“由{0}在{1}上成功提交的消息:{2}”,作者,checkindate,消息)); } },svn,logging,sharpsvn,Svn,Logging,Sharpsvn,这是我的代码,但我只能得到一个日志条目,它应该是修订范围内所有日志的路径,有什么问题吗?我不知道有关此api的任何信息,但看起来您调用的GetLog的范围介于上次更改修订和当前修订之间。本能地,我认为根据定义,这只是一个日志条目 所以我认为你的修订范围是错误的。为什么不尝试对预期的修订范围进行编码,看看结果是否符合您的预期。我不知道有关此api的任何信息,但看起来您调用的GetLog的范围介于上次更改修订和当前修订之间。本能地,我认为根据定义,这只是一个日志条目 所以我认为你的修订范围是错误的。
所以我认为你的修订范围是错误的。为什么不尝试对预期的修订范围进行编码,看看结果是否符合您的预期。我不知道有关此api的任何信息,但看起来您调用的GetLog的范围介于上次更改修订和当前修订之间。本能地,我认为根据定义,这只是一个日志条目
所以我认为你的修订范围是错误的。你为什么不试着对预期的修订范围进行编码,看看结果是否符合你的预期。好的,现在我从以下代码中得到了我想要的:
using (SvnClient client = new SvnClient())
{
client.Commit(_targetPath, commitArgs);
SvnInfoEventArgs result;
client.GetInfo(_targetPath, out result);
SvnLogArgs args = new SvnLogArgs();
args.Start = new SvnRevision(result.LastChangeRevision);
args.End = new SvnRevision(result.Revision);
Collection<SvnLogEventArgs> logitems;
client.GetLog(_targetPath, args, out logitems);
foreach (SvnLogEventArgs logentry in logitems)
{
string author = logentry.Author;
string message = logentry.LogMessage;
DateTime checkindate = logentry.Time;
AddMessage(string.Format("Commited successfully by {0} on {1} for message: {2}", author, checkindate, message));
}
}
使用(SvnClient client=new SvnClient())
{
尝试
{
提交(_targetPath,commitArgs);
SvnLogArgs args=新的SvnLogArgs();
//获取最新的更改版本
SvnWorkingCopyClient workingCopyClient=新的SvnWorkingCopyClient();
SvnWorkingCopyVersion;
workingCopyClient.GetVersion(_targetPath,out version);
long localRev=version.End;
args.Start=new SvnRevision(localRev);
args.End=新SvnRevision(localRev);
//获取最新日志
收集资料;
GetLog(_targetPath,args,out logitems);
如果(logitems.Count>0)
{
foreach(登录项[0]中的SvnChangeItem路径。更改路径)
{
AddMessage(string.Format(“更改路径,{0},更改日期,{1},按操作,{2}”,path.path,logitems[0]。Time,path.action));
}
}
WriteLogFile(messageLog.ToString());
}
捕获(SVEX)
{
}
}
好的,现在我从以下代码中得到了我想要的:
using (SvnClient client = new SvnClient())
{
client.Commit(_targetPath, commitArgs);
SvnInfoEventArgs result;
client.GetInfo(_targetPath, out result);
SvnLogArgs args = new SvnLogArgs();
args.Start = new SvnRevision(result.LastChangeRevision);
args.End = new SvnRevision(result.Revision);
Collection<SvnLogEventArgs> logitems;
client.GetLog(_targetPath, args, out logitems);
foreach (SvnLogEventArgs logentry in logitems)
{
string author = logentry.Author;
string message = logentry.LogMessage;
DateTime checkindate = logentry.Time;
AddMessage(string.Format("Commited successfully by {0} on {1} for message: {2}", author, checkindate, message));
}
}
使用(SvnClient client=new SvnClient())
{
尝试
{
提交(_targetPath,commitArgs);
SvnLogArgs args=新的SvnLogArgs();
//获取最新的更改版本
SvnWorkingCopyClient workingCopyClient=新的SvnWorkingCopyClient();
SvnWorkingCopyVersion;
workingCopyClient.GetVersion(_targetPath,out version);
long localRev=version.End;
args.Start=new SvnRevision(localRev);
args.End=新SvnRevision(localRev);
//获取最新日志
收集资料;
GetLog(_targetPath,args,out logitems);
如果(logitems.Count>0)
{
foreach(登录项[0]中的SvnChangeItem路径。更改路径)
{
AddMessage(string.Format(“更改路径,{0},更改日期,{1},按操作,{2}”,path.path,logitems[0]。Time,path.action));
}
}
WriteLogFile(messageLog.ToString());
}
捕获(SVEX)
{
}
}
我认为您试图做的是在提交工作副本时列出更改的文件,即在提交文件时显示文件通知。有一种比你现在做的更好的方法:
using (SvnClient client = new SvnClient())
{
try
{
client.Commit(_targetPath, commitArgs);
SvnLogArgs args = new SvnLogArgs();
// get latest changed version
SvnWorkingCopyClient workingCopyClient = new SvnWorkingCopyClient();
SvnWorkingCopyVersion version;
workingCopyClient.GetVersion(_targetPath, out version);
long localRev = version.End;
args.Start = new SvnRevision(localRev);
args.End = new SvnRevision(localRev);
//get latest log
Collection<SvnLogEventArgs> logitems;
client.GetLog(_targetPath, args, out logitems);
if (logitems.Count > 0)
{
foreach (SvnChangeItem path in logitems[0].ChangedPaths)
{
AddMessage(string.Format("Changed path,{0},changed on,{1},by action,{2}", path.Path, logitems[0].Time, path.Action));
}
}
WriteLogFile(messageLog.ToString());
}
catch (SvnException ex)
{
}
}
有关更多详细信息,请参阅事件和
此外,还可以使用具有以下类型的out
参数的重载:
我认为您试图做的是在提交工作副本时列出更改的文件,即在提交文件时显示文件通知。有一种比你现在做的更好的方法:
using (SvnClient client = new SvnClient())
{
try
{
client.Commit(_targetPath, commitArgs);
SvnLogArgs args = new SvnLogArgs();
// get latest changed version
SvnWorkingCopyClient workingCopyClient = new SvnWorkingCopyClient();
SvnWorkingCopyVersion version;
workingCopyClient.GetVersion(_targetPath, out version);
long localRev = version.End;
args.Start = new SvnRevision(localRev);
args.End = new SvnRevision(localRev);
//get latest log
Collection<SvnLogEventArgs> logitems;
client.GetLog(_targetPath, args, out logitems);
if (logitems.Count > 0)
{
foreach (SvnChangeItem path in logitems[0].ChangedPaths)
{
AddMessage(string.Format("Changed path,{0},changed on,{1},by action,{2}", path.Path, logitems[0].Time, path.Action));
}
}
WriteLogFile(messageLog.ToString());
}
catch (SvnException ex)
{
}
}
有关更多详细信息,请参阅事件和
此外,还可以使用具有以下类型的out
参数的重载:
“它应该是修订范围内所有日志的路径”是什么意思?是否要枚举提交的文件?您所说的“它应该是修订范围内所有日志的路径”是什么意思?是否要枚举提交的文件?您还没有解释要执行的操作,可能有更好/更简单的方法。请确保使用“格式为代码”按钮,和/或将代码缩进4个空格以获得更美观的布局。嗨,Sander Rijken,我尝试使用Notify和out commit result,但是我无法从您提到的方法中获得任何提交结果:SvnCommitResult commitResult;提交(_targetPath,commitArgs,out commitResult);提交后commitResult的值是多少?该值为null,提交文件后,我得到了null值。您还没有解释要做什么,可能有更好/更简单的方法。请确保使用“format as code”按钮,和/或将代码缩进4个空格以获得更好的布局。嗨,Sander Rijken,我曾尝试使用Notify和out提交结果,但我无法从您提到的方法中获得任何提交结果:SvnCommitResult commitResult;提交(_targetPath,commitArgs,out commitResult);提交后commitResult的值是多少?值为null,提交文件后,我得到了null值。很好的尝试,但看起来他想做一些不同的事情,尽管我不确定。很好的尝试,但是