【发布时间】:2010-07-31 05:02:35
【问题描述】:
我们希望在 SVN 中对该文件的许多修订中跟踪删除某个文件中的单个行。
我尝试查看各种修订/差异以查看它何时被删除,但无法找到有问题的修订。我们如何使用 svn 命令来做到这一点?
【问题讨论】:
标签: svn
我们希望在 SVN 中对该文件的许多修订中跟踪删除某个文件中的单个行。
我尝试查看各种修订/差异以查看它何时被删除,但无法找到有问题的修订。我们如何使用 svn 命令来做到这一点?
【问题讨论】:
标签: svn
如果您在 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 查找最新转储文件中的文本。
非增量转储包含每个文件的每个修订的全文。
【讨论】:
nedbatchelder.com 正是为此目的创建了python script。
【讨论】:
我知道这并不漂亮,但它会相对较快:我建议使用“人工”二进制搜索手动检查该文件的 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,宾果!)
【讨论】: