SharpSVN - 如何获得以前的版本?

时间:2011-07-01 18:26:43

标签: c# sharpsvn

我正在尝试找到一种有效的方法来获取文件的先前版本,以便使用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()但这似乎只得到了最新提交的先前版本。

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试只获取您正在寻找的版本。我假设logSvnLoggingEventArgs的实例?

如果是,请使用:

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必须联系存储库。