如何恢复作者在 svn 中对一系列修订的 svn 更改

How to revert svn changes from a range of revisions by author in svn

我想根据作者的一系列修订创建补丁

我当前的命令行是这样的:

svn diff -rFIRSTREVISION:LATESTREVISION pathOfWorkingCopy > /myPatchFile.patch

我是否还可以指定进行这些更改的作者?

每个修订版只有一位作者,因此您只需确定要比较的作者所做的修订版。

如果其他作者对与该特定作者交错的相同路径进行了更改,您将需要分阶段执行此操作(确定由您要查找的人编写的修订,然后执行差异每个 revision/block 次修订)。

简短回答:不,不是标准命令行。

但是,使用 svn log -q 应该很容易找到作者的修订。这只会列出包括作者在内的修订行。您可以将其与 awk 结合使用以查找作者行,然后进行修订。

从那里,您可以使用 -c 找到该版本中的差异:

$ svn log -q \
    | awk -v author=$author -F '|' '[=10=] ~ /^r/ &&  = " "author" "  {           
          print substr (, 2)
      }' | while read rev
           do
               svn diff -c$rev
           done

awk -v author=$author 允许您使用真实作者的姓名设置 Awk 变量 author[=16=] ~ /^r/ && = " "author" " 表示行必须以 r 开头(跳过只包含破折号的行),第二个字段必须是作者,每边都被 space 包围。这拉起作者负责的台词。

最后,print substr (,2) 打印出前面没有 r 的修订版。

我通过一个 while read 循环来对所有修订进行 svn diff -c$rev 处理。

从 Subversion 1.8 开始,您可以使用 --search 命令查找特定用户所做的所有提交。

搜索语法:--search

svn log --search usernam e -l 50

然后您需要解析提交并对每个提交进行比较。

如果您在 Linux 上,您可以使用 bash 在执行搜索后执行用户所做的差异。 Bash-linux-svn solution