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

时间:2008-11-12 02:16:08

标签: svn

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

9 个答案:

答案 0 :(得分:177)

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

#!/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
    }
}

然后,你可以用:

来调用它
history_of_file $1

答案 1 :(得分:140)

与你描述的略有不同,但我认为这可能是你真正需要的:

svn blame filename

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

答案 2 :(得分:84)

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

svn log --diff [path_to_file] > log.txt

答案 3 :(得分:37)

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

答案 4 :(得分:20)

开始
svn log -q file | grep '^r' | cut -f1 -d' '

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

答案 5 :(得分:8)

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

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

答案 6 :(得分:3)

据我所知,没有内置的svn命令来完成此任务。您需要编写一个脚本来运行几个命令来构建所有差异。一个更简单的方法是使用GUI svn客户端,如果这是一个选项。其中许多例如Eclipse的颠覆性插件将列出文件的历史记录,并允许您查看每个修订版本的差异。

答案 7 :(得分:3)

谢谢,本丁。我非常喜欢你的解决方案。

我将其更改为按相反顺序工作,首先显示最近的更改。对于长期存在的代码而言,这一点非常重要,可持续数年。我通常将它管道更多。

svnhistory elements.py |more

我添加了-r到排序。我删除了规范。处理第一个记录'。它会在最后一个条目中出错,因为没有什么可以区分它。虽然我和它一起生活,因为我从来没有这么做过。

#!/bin/bash                                                                    

# history_of_file                                                              
#                                                                              
# Bendin on Stack Overflow: http://stackoverflow.com/questions/282802          
#   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.             
#                                                                              
# Dlink                                                                        
#   Made to work in reverse order                                              

function history_of_file() {
    url=$1 # current url of file                                               
    svn log -q $url | grep -E -e "^r[[:digit:]]+" -o | cut -c2- | sort -nr | {
        while read r
    do
            echo
            svn log -r$r $url@HEAD
            svn diff -c$r $url@HEAD
            echo
    done
    }
}

history_of_file $1

答案 8 :(得分:0)

在研究此主题时,我看到了很多部分答案。这是对我有用的,希望对其他人有帮助。该命令将在命令行上显示输出,显示修订号,作者,修订时间戳和所做的更改:

svn blame -v <filename>

为使搜索更轻松,您可以将输出内容写到文件中,并根据需要查找grep。