【问题标题】:How to find out which revision contained a certain line in SVN如何找出哪个修订版包含SVN中的某一行
【发布时间】:2010-07-31 05:02:35
【问题描述】:

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

我尝试查看各种修订/差异以查看它何时被删除,但无法找到有问题的修订。我们如何使用 svn 命令来做到这一点?

【问题讨论】:

    标签: svn


    【解决方案1】:

    如果您在 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 查找最新转储文件中的文本。

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

    【讨论】:

      【解决方案2】:

      nedbatchelder.com 正是为此目的创建了python script

      【讨论】:

        【解决方案3】:

        我知道这并不漂亮,但它会相对较快:我建议使用“人工”二进制搜索手动检查该文件的 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,宾果!)

        【讨论】:

          猜你喜欢
          • 2011-05-23
          • 2017-09-07
          • 2011-01-15
          • 2017-08-14
          • 2018-06-15
          • 1970-01-01
          • 2015-12-27
          • 2013-07-13
          • 1970-01-01
          相关资源
          最近更新 更多