1

我正在使用 VisualSVN Server 和 TortoiseSVN,我试图在特定文件的多个修订版中找到特定行的出现位置。

save(12);与我的工作副本相比,我正在尝试查看在过去的修订版中出现的位置以及移动的修订版。

r1 和我的工作副本之间的统一差异仅显示初始位置。我试过单独查看差异,但有数百个修订。

有没有办法做到这一点?

4

3 回答 3

0

如果您在文件的当前版本上运行 TortoiseSVN 责备工具,您应该看到该行变成现在的版本,(以及是谁做的)。

于 2013-07-22T11:16:50.993 回答
0

前言

  • 就 diff 而言,“字符串的首次出现”是 diff 输出中“+ 字符串”的首次出现
  • 就差异而言,“它在哪些修订中被移动”(假设新行不在差异上下文/ 3行周围作为默认值/旧行)在同一差异中出现“-字符串”和“+字符串”

不是现成的代码,而是肮脏的草稿想法

纯粹的颠覆方式

这种方式(至少)有两种方法:从上到下用责备探索历史,从下到上用 log+diff

Blame-method 1) svn blame FILE > BLAMED-FILE, 2) 在 BLAMED-FILE 字符串“save(12)”中查找,注意字符串编号(任何方式)和修订最后更改(第一列)REV 3)回溯到历史svn blame -r REV FILE > BLAMED-FILE

重复步骤 2-3,同时 a) 更改“save(12)”的字符串编号将不会显示“Movement revision”(它是前一行,而不是当前)b)文件中的 REV 将等于当前 - 它是出现“保存(12)”

Log+diff-method 1)svn log -q -v FILE(获取修订列表,以任何形式影响文件) 2)列表中的每个修订执行svn diff -c REV | grep save(12) > FILE-REV从最旧到最新的修订方向 3)查找与前言中的第二个注释相关的修订,检查文件-REV

Mercurial+hg颠覆方式

在当地材料上进行了测试。我想查看文件中“Region=-MA”行的历史记录

>hg grep --all -n Region Charter.ini
Charter.ini:599:28:+:Region=-NE
Charter.ini:598:23:-:Region=
Charter.ini:598:26:-:Region=-MA
Charter.ini:598:24:+:Region=-MA
Charter.ini:597:13:+:Region=-MI
Charter.ini:597:16:+:Region=-GA
Charter.ini:597:19:+:Region=-CA
Charter.ini:597:23:+:Region=
Charter.ini:597:26:+:Region=-MA

一个带有答案“Region=-MA字符串的命令出现在字符串 26 中的修订版 597(SVN 编号为 598,+1)中。在修订版 598 中,字符串被移至字符串 24”,并且差异确认了这一点。

597(文件添加)

>hg diff -c 597 Charter.ini
diff -r 7e3dfc891358 -r 25efa70e5350 Charter.ini
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/Charter.ini       Tue Dec 29 08:27:48 2009 +0000
...
+Region=-MA
+75.130.96.0-75.130.111.255

598

>hg diff -c 598 Charter.ini
diff -r 25efa70e5350 -r 5665435f74b4 Charter.ini
--- a/Charter.ini       Tue Dec 29 08:27:48 2009 +0000
+++ b/Charter.ini       Tue Dec 29 13:09:58 2009 +0000
...
-//CHARTER-NET-5BLK
 66.188.0.0-66.191.255.255
+71.80.0.0-71.95.255.255
+75.128.0.0-75.143.255.255   
...
-
-//NETBLK-CHARTER-NET
-Region=
-75.128.0.0-75.143.255.255
+71.84.32.0-71.84.63.255

 Region=-MA
 75.130.96.0-75.130.111.255

为什么我使用子字符串而不是全字符串?只是因为在完整字符串的情况下我得到了奇怪和意想不到的结果(与以前的 grep 相比)

>hg grep --all -n Region=-MA Charter.ini
Charter.ini:597:26:+:Region=-MA
于 2013-07-23T13:38:44.520 回答
0

这可以手动完成,也可以使用脚本自动完成,并且分阶段进行,但您会惊讶于速度有多快:

  1. 编写一个 grep 命令,如果该行在一个位置,则在另一个位置失败 - 例如grep -n " Text of the line " filename.ext | grep 当前行号
  2. 假设您有 1000 个可能的修订版本,这应该在 1000 处通过,在 0 处失败
  3. 将一个文件更新为 rev 500 并再次运行它 - 如果它通过了你失败了你上升在任何一种情况下你使用我们之前一半的差异,并继续做同样的事情,即 250、125、62、31、15 , 7, 4, 2, 1 - 在这个过程结束时 - (二进制搜索) - 您将有两个相邻的文件 1 的修订通过 1 失败 - 只需十步即可获得 1000 次修订,20 次获得一百万次。
于 2013-07-23T06:58:53.073 回答