我如何查看SVN文件的所有历史更改
我知道我可以使用svn diff -ra:b repo
查看两个指定修订之间的更改。 我想要的是每个修改文件的差异。 有这样的命令吗?
没有内置的命令,所以我通常只是做这样的事情:
#!/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
与您所描述的略有不同,但我认为这可能是您实际需要的:
svn blame filename
它将打印文件的每一行都有上次更改提交的时间和作者的前缀。
如果您想查看代码更改的整个文件历史logging,请执行以下操作:
svn log --diff [path_to_file] > log.txt
你可以使用git-svn
将版本库导入到Git仓库,然后使用git log -p filename
。 这将显示文件的每个日志条目,然后显示相应的diff。
从…开始
svn log -q file | grep '^r' | cut -f1 -d' '
这会得到一个修改文件列表,其中你可以使用脚本重复调用svn diff
。
怪名叫“责备”命令这样做。 如果你使用的是Tortoise,它会给你一个“从修订版本”对话框,然后是一个逐行列出的修订版本号和作者旁边的文件列表。
如果你右键点击修订信息,你可以打开一个“显示日志”对话框,提供完整的签入信息,以及其他文件,这是登记的一部分。
据我所知,没有内置的svn命令来完成这一点。 你需要编写一个脚本来运行几个命令来构build所有的差异。 如果这是一个选项,更简单的方法是使用GUI svn客户端。 它们中的很多(例如Eclipse的颠覆插件)将列出文件的历史logging,并允许您查看每个修订版本的差异。
谢谢,Bendin。 我非常喜欢你的解决scheme。
我改变它以相反的顺序工作,首先显示最近的变化。 对于长期存在的代码来说,这是很重要的,并且保持了几年。 我通常把它变成更多。
svnhistory elements.py |more
我添加了-r到sorting。 我删除了规范。 处理“第一笔logging”。 这是错误的最后一项,因为没有什么可以区别。 虽然我活着,因为我从来没有下过这么远。
#!/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