如何查看SVN中文件的所有历史更改

Gor*_*son 166 svn

我知道我可以 svn diff -r a:b repo 查看两个指定修订版本之间的更改.我想要的是每个修改文件的差异.这样的命令可用吗?

ben*_*din 179

它没有内置命令,所以我通常只做这样的事情:

#!/bin/bash

# history_of_file
#
# Outputs the full history of a given file as a sequence of
# logentry/diff pairs.  The first revision of the file is emitted as
# full text since there's not previous version to compare it to.

function history_of_file() {
    url=$1 # current url of file
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -n | {

#       first revision as full text
        echo
        read r
        svn log -r$r $url@HEAD
        svn cat -r$r $url@HEAD
        echo

#       remaining revisions as differences to previous revision
        while read r
        do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
        done
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以用:

history_of_file $1
Run Code Online (Sandbox Code Playgroud)

  • 我以前从来没有见过"套管"的技巧.整齐. (35认同)
  • `svn log --diff [path_to_file]`就像这样!http://stackoverflow.com/a/24938573/3185510 (23认同)
  • [脚本文件版本](http://stackoverflow.com/questions/5622367/generate-history-of-changes-on-a-file-in-svn/5721533#5721533)此脚本fwiw. (5认同)

ngn*_*ngn 143

与您描述的略有不同,但我认为这可能是您实际需要的:

svn blame filename
Run Code Online (Sandbox Code Playgroud)

它将打印文件,每行以前一次更改它的提交的时间和作者为前缀.

  • 哇这真棒!多年来一直在使用SVN而且从来不知道这个:O (4认同)
  • 您可能需要使用verbose/-v选项来查看时间戳(我使用svn 1.7.9的默认构建). (4认同)

emi*_*zki 88

如果要查看包含代码更改的文件的完整历史记录:

svn log --diff [path_to_file] > log.txt
Run Code Online (Sandbox Code Playgroud)

  • 我不知道什么时候添加了--diff选项但它适用于svn 1.8.10,所以不需要bash脚本 (3认同)

Gre*_*ill 38

您可以使用git-svn将存储库导入Git存储库,然后使用git log -p filename.这显示了文件的每个日志条目,后跟相应的diff.

  • 安装git,创建一个git存储库,使用git命令?问题被标记并询问Subversion. (26认同)
  • 我使用git作为使用git-svn的Subversion客户端.这就是我对Subversion存储库执行log + diff操作的方法.Git有一些非常好的存储库查看工具,它不是一个古怪的想法. (21认同)
  • 以上某人(正确地)祝贺写了一个好的脚本 - 提供SVN中没有的功能.看到git是本地的,除非你推动,你可以称之为工具,不需要对事情感到烦恼. (10认同)

小智 20

从...开始

svn log -q file | grep '^r' | cut -f1 -d' '
Run Code Online (Sandbox Code Playgroud)

这将为您提供文件更改的修订列表,然后您可以使用该列表重复调用脚本svn diff.

  • 或者......继续!``svn log -q some_file.xxx | grep ^ r | awk'{print $ 1}'| sed -e's/^ r //'| xargs -i svn diff -rHEAD:{} some_file.xxx>〜/ file_history.txt``很好的小一行(awk和cut一样) (4认同)

goo*_*ack 8

奇怪命名的"责备"命令就是这样做的.如果你使用Tortoise,它会给你一个"from revision"对话框,然后是一个文件列表,其中包含一行一行的修订版号和作者旁边的作者.

如果右键单击修订信息,则可以打开一个"显示日志"对话框,其中提供完整的签入信息以及签入的其他文件.