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

时间:2015-02-09 16:15:34

标签: svn version-control

我想通过作者

从一系列修订中创建一个补丁

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

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

无论如何,我还可以指定进行这些更改的作者吗?

3 个答案:

答案 0 :(得分:1)

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

但是,使用svn log -q找到作者的修订应该很容易。这将仅列出包含作者的修订行。您可以将其与awk结合使用以查找作者行,然后删除修订版。

从那里,您可以使用-c查找该修订版中的差异:

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

awk -v author=$author允许您使用真实作者的名称设置Awk变量author$0 ~ /^r/ && $2 = " "author" "表示行必须以r开头(跳过除了短划线之外什么都不包含的行),第二个字段必须是作者被每边的空格包围。这会拉扯作者负责的界限。

最后,print substr ($1,2)打印出的版本没有前面的r

我通过while read循环对其进行管道处理以对所有修订版执行svn diff -c$rev

答案 1 :(得分:0)

每个修订版只有一个作者,因此您只需要确定作者所做的修改,而这些修改要进行差异化。

如果其他作者对与此特定作者交错的相同路径进行了更改,则需要分阶段执行此操作(确定您正在寻找的人创作的修订版,然后执行差异处理每个版本/修订版块。)

答案 2 :(得分:0)

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

搜索语法:--search

svn log --search usernam e -l 50

然后,您需要解析提交并为每个提交执行差异。

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