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