在svn上生成文件变更历史记录

10

是否有可能生成一个文件,其中包括某个文件上所有更改的摘要(包括是谁,什么时间做出更改)?VSS中曾经有这样的选项(我想它被称为“历史记录”),对于回溯和跟踪谁何时做出了某个更改非常有用。

顺便说一下,我正在使用tortoisesvn。

提前感谢。


1
svn 中,它被称为 svn log。尝试使用 Tortoise SVN 的 Show log 或类似选项(我不记得确切的选项了)。也应该有一些导出到文件的选项。 - pajton
@pajton - “显示日志”并没有展示我想要的信息。它只会显示文件被更改的版本和相应的“消息”。但是我需要更详细的信息,包括所有更改、何时进行以及由谁进行的记录。 - Jack Juiceson
5个回答

15

在资源管理器中右键单击文件,然后选择"TortoiseSVN","显示日志"。

取消选择"隐藏无关的更改路径", 取消选择"停止复制/重命名" 选中"包括合并的修订版本" 点击"显示所有"

现在,在顶部窗格中您将看到一个包含用户名、日期和日志的修订版本列表。单击您感兴趣的修订版本,您可以在第二个窗格中查看完整的日志。第三个窗格会显示所选修订版本中每个已更改的文件。在此窗格中双击您的文件,您可以查看该文件中进行的更改。

正如以前所提到的,Tortoise具有"责备"功能,这通常非常有见地,但它只能显示源代码中每行最近的编辑。如果有人删除了行,则根本看不到他们的修改。

编辑:

如果您愿意使用命令行工具和bash,此问题以前已经得到解答:如何在SVN中查看文件的所有历史更改

在Windows PC上,获取bash和命令行SVN的最佳方法是安装Cygwin。


"仅显示受影响的路径" 真该早点知道,谢谢! - Pieter De Bie

13

这是一个批处理文件版本,翻译自bendin在如何查看SVN中文件的所有历史更改问题中的bash脚本:

@echo off

set file=%1

if [%file%] == [] (
  echo Usage: "%0 <file>"
  exit /b
)

rem first revision as full text
for /F "tokens=1 delims=-r " %%R in ('"svn log -q %file%"') do (
  svn log -r %%R %file%
  svn cat -r %%R %file%
  goto :diffs
)

:diffs

rem remaining revisions as differences to previous revision
for /F "skip=2 tokens=1 delims=-r " %%R in ('"svn log -q %file%"') do (
  echo.
  svn log -r %%R %file%
  svn diff -c %%R %file%
)

请注意,此批处理文件需要在您的路径中拥有一个命令行SVN客户端(而不是TortoiseSVN)。 我个人使用SilkSVN,但还有其他几种选择


2

如 @pajton 提到的,你可以使用 svn log <filename> 命令。具体细节和限制请参考文档


@Jack Juiceson:Emzy提供的SVN文档链接就是你需要的。我建议你使用-g/-use-merge-history选项来获取从任何合并回主干的分支中的信息。你在问题评论中也指出需要更多信息,可以尝试使用-v/-verbose选项。它应该提供有关谁和何时修改的更多信息。至于具体改变了什么,那将需要一个全新的命令。这两个选项都在TortoiseSVN的复选框中。我很少使用Tortoise,所以无法给出确切的参考。 - jgifford25
@jgifford25 - 我正在使用TortoiseSVN,但我在TortoiseSVN二进制目录下看不到svn.exe以尝试-v。 - Jack Juiceson
@Jack Juiceson:Tortoise没有命令行客户端。你可以从许多供应商那里获取命令行二进制文件。我认为最容易获取和安装的是CollabNet:http://www.open.collab.net/downloads/subversion/。记住,你只需要命令行客户端,而不是整个套件(服务器、Apache和其他随Edge一起提供的工具)。 - jgifford25

2

你可能会发现svn blame <filename>更有用,因为它可以告诉你文件的特定版本是谁、什么以及何时修改的。


1
我知道责备,并且经常使用它。但是有时候会出现这样的情况,你记得在文件中有一段代码,但是有人删除了它,你想找出是谁干的。在VSS时代,我会生成历史文件并搜索代码片段,然后找出是谁、何时以及为什么删除了它。 - Jack Juiceson
@Jack 你可能想要考虑强制提交者在他们的提交中添加适当的注释。日志功能应该告诉你所有的内容,或者至少提供一个链接到描述更改的Jira/Trac/...票证。 - vickirk

0
我想补充一点,最近版本的Tortoise也包括命令行工具,只需要在安装时选择它们即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接