如何找出SVN中包含某一行的修订版本

时间:2010-07-31 05:02:35

标签: svn

我们希望在SVN中对该文件的许多修订中删除某个文件中的单行。

我尝试查看各种修订/差异以查看它何时被删除,但无法找到违规版本。我们如何使用svn命令执行此操作?

3 个答案:

答案 0 :(得分:2)

如果您使用的是Linux,并且知道要查找哪个文件,则可以使用该shell脚本输出该文件的所有修订版。

#!/bin/bash
svn log "$1" -q | grep -oE r[0-9]+ | xargs -t -n1 -r -d '\n' svn cat "$1" -r

将工作副本文件名或存储库URL作为参数传递给此脚本。

如果其他所有方法都失败了,并且您使用svnadmin dump进行常规转储而没有--incremental开关,则可以使用grep查找最新转储文件中的文本。

非增量转储包含每个文件的每个修订版的全文。

答案 1 :(得分:2)

nedbatchelder.com正是为了这个目的而制作了python script

答案 2 :(得分:2)

我知道这不是很漂亮,但它会相对较快:我建议只使用“人工”二进制搜索手动浏览该文件的svn版本。如果您要进行2000次修订,则只需要实际查看12个修订版,将其缩小到违规修订版。

假设该行已在r1000中添加,最新版本为r3000。然后检查r2000,如果该线路仍然存在,则在r2000和r3000之间选择一个修订版(即r2500),否则在r1000和r2000之间选择一个修订版(即r1500)。只需继续使用此手动搜索算法即可缩小范围。有了2000个版本的窗口,你应该在12次迭代中得到它。 (2000,1000,500,250,125,64,32,16,8,4,2,1,宾果游戏!)