我正在尝试找到一种有效的方法来获取文件的先前版本,以便使用SharpSVN进行文本比较。
using (SvnClient c = new SvnClient())
{
c.Authentication.DefaultCredentials = new NetworkCredential(
ConfigurationManager.AppSettings.Get("SvnServiceUserName")
, ConfigurationManager.AppSettings.Get("SvnServicePassword")
, ConfigurationManager.AppSettings.Get("SvnServiceDomain")
);
c.Authentication.SslServerTrustHandlers += new EventHandler<SvnSslServerTrustEventArgs>(Authentication_SslServerTrustHandlers);
Collection<SvnFileVersionEventArgs> fileVersionCollection = new Collection<SvnFileVersionEventArgs>();
SvnRevisionRange range = new SvnRevisionRange(0, this.hooks.Revision);
SvnFileVersionsArgs args = new SvnFileVersionsArgs();
args.RetrieveProperties = true;
args.Range = range;
foreach (SvnChangeItem item in log.ChangedPaths)
{
string path = this.repositoryPath + item.Path;
bool gotFileVersions = false;
try
{
if (item.NodeKind == SvnNodeKind.File)
gotFileVersions = c.GetFileVersions(SvnTarget.FromString(path), args, out fileVersionCollection);
上面的代码是执行我的请求的一个例子,但效率非常低。我的目标是能够选择修订版本以及之前的修订版本。例如,如果我的存储库位于r185,但我想在修订版100中查看该文件,并且还查看同一文件的先前版本(我不知道它是什么),该怎么办呢?
我看过c.GetInfo()但这似乎只得到了最新提交的先前版本。
谢谢!
答案 0 :(得分:1)
尝试只获取您正在寻找的版本。我假设log
是SvnLoggingEventArgs
的实例?
如果是,请使用:
args.Range = new SvnRevisionRange(log.Revision, log.Revision - 1);
这样你只会从该修订中检索更改,并且因为log.Revision保证是更改的修订版号,如果你减去一个,你就有了以前的版本。
答案 1 :(得分:1)
您是否需要先前版本(上次提交前的版本)或本地未修改版本。
Subversion工作副本库具有以下“魔术”版本
Working (SvnRevision.None) - What you have in your working copy
(includes local modifications)
Head (SvnRevision.Head) - The last committed version of a url in the
repository
Base (SvnRevision.Base) - The version you last committed or updated to.
Committed (SvnRevision.Comitted) - The last revision <= BASE in which the path was
modified
Previous (SvnRevision.Previous) - The last revision before Committed.
(Literally Committed-1)
要获得其中一个版本,您可以使用SvnClient.Write()
using (SvnClient c = new SvnClient())
using (Stream to = File.Create(@"C:\temp\my.tmp"))
{
c.Write(new SvnPathTarget(@"F:\projects\file.cs", SvnRevision.Base), to);
}
工作和基地的文件可在本地获得。对于其他版本,Subversion必须联系存储库。