找到SharpSVN首次出现的线路?

时间:2013-10-13 22:34:04

标签: svn sharpsvn

使用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的新手。

谢谢!

1 个答案:

答案 0 :(得分:2)

好的,我不知道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方法是一种产生我上面给你的同类报告的方式。

对不起,我无法超越这个......