2013-10-13 50 views
1

是否有任何简单的方法来确定哪个提交文件的指定行最后修改,与SharpSVN?找到SharpSVN的第一次出现?

比方说,我有以下三个提交:

提交1:

Hello 

提交2:

Hello, World! 

提交3:

Hello, World! 
Hi There :D 

我会正在寻找某种东西f函数,做以下操作:

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

谢谢!

回答

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方法是制作上面给出的同类报告的一种方法。

对不起,我忍不住了...

+0

谢谢!我会研究一下,明天再试一试(现在远离我的电脑)。 – MatthewSot

+1

其实,只是试了一下,它完美的工作:) client.GetBlame(target,out blame);到SvnBlameEventArgs的集合做了我想要发生的事情。再次感谢 :) – MatthewSot