【问题标题】:Locate first occurance of line with SharpSVN?使用 SharpSVN 找到第一次出现的行?
【发布时间】:2014-04-17 05:01:58
【问题描述】:

是否有任何简单的方法可以使用 SharpSVN 确定文件的指定行最后一次修改的提交?

假设我有以下三个提交:

提交 1:

Hello

提交 2:

Hello, World!

提交 3:

Hello, World!
Hi There :D

我正在寻找执行以下操作的某种函数:

LastMod(lineNum: 1); //returns 2, since the first line was last modified in commit 2
LastMod(lineNum: 2); //returns 3, for the same reason

我需要在相当大的范围内执行此操作(大型 SVN 存储库,每个文件有成百上千行),因此仅“蛮力”比较每个先前提交的每一行可能是行不通的。不确定 SVN 是否提供了我正在寻找的实现,我是 SVN 和 SharpSVN 的新手。

谢谢!

【问题讨论】:

    标签: svn sharpsvn


    【解决方案1】:

    好的,我不知道 SharpSVN,但我想我可以帮忙...

    Subversion 有一个特殊的命令叫做annotateblamepraise。该命令的作用是列出文件中的所有行,并显示最后一行的更改时间和更改者。

    C> REM: produce an annotated report on foo.c#
    C> svn blame foo.c# 
    

    这将生成一个看起来像这样的报告(嗯,不是这样,因为这是经过处理的 Java 代码,但你明白了):

    109990     jevans package com.tc.cache.frontend;
    109990     jevans 
    109990     jevans import com.tangosol.net.CacheFactory;
    109990     jevans import com.tangosol.net.NamedCache;
    140072 dweintraub import java.util.ArrayList;
    136130 ihroseline import java.util.List;
    136130 ihroseline import java.util.Map;
    123931     bfelds import org.apache.commons.logging.Log;
    109990     jevans import org.apache.commons.logging.LogFactory;
    

    第一列是更改行的版本,第二列是更改行的人。剩下的就是源代码行了。

    不是 C# 开发人员,除此之外我真的无能为力。然而,SharpSVN 有一个名为SvnBlameArgs 的类,看起来它可能会做同样的事情。还有一个SvnBlameEventArgs 类。

    还有一个 Blame 方法,它是 SvnClient 类的一部分。我敢打赌,SvnBlame 方法是一种生成我在上面向您展示的相同类型的报告的方法。

    对不起,我无能为力...

    【讨论】:

    • 谢谢!我会调查一下,明天试试(现在远离我的电脑)。
    • 其实,刚刚试了一下,效果很好:) client.GetBlame(target, out blame);到 SvnBlameEventArgs 的集合正是我想要发生的事情。再次感谢:)
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2011-07-22
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多