使用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的新手。
谢谢!
答案 0 :(得分:2)
好的,我不知道SharpSVN,但我想我可以帮忙......
Subversion有一个名为annotate
或blame
或praise
的特殊命令。该命令的作用是列出文件中的所有行,并显示最后一行的更改时间以及由谁更改。
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
方法是一种产生我上面给你的同类报告的方式。
对不起,我无法超越这个......