SVN:如何知道文件被删除的修订版本?

时间:2011-07-21 03:24:01

标签: windows svn command-line

鉴于我在Windows上使用svn命令行,如何查找文件被删除的修订号?在Windows上,没有像grep这样的花哨的东西,我试图只使用命令行,没有TortoiseSVN。提前谢谢!

编辑:

  • 我看了一些帖子,比如examining history of deleted file,但它没有回答我的问题。
  • 除了svn log -v url>之外还有什么办法吗? log.out并用记事本搜索?

3 个答案:

答案 0 :(得分:17)

安装Cygwin。

我用这个:

svn log -v --limit <nr> -v | grep -E '<fileName>|^r' | grep -B 1 <fileName>

,其中

fileName - the name of the file or any pattern which matches it
nr - the number of latest revisions in which I want to look for

这将为您提供有关该文件的所有操作(添加,删除,删除,修改)的修订,但通过grep的简单调整,您只能删除修订版。

(显然, - limit是可选的,但是你通常会有一个概述,你需要搜索多深才能获得一些性能。)

答案 1 :(得分:9)

日志是要查看的地方。我知道您不想听到这个答案,但这是您需要在SVN中查找已删除文件的地方。

原因很简单,删除的文件在删除后不可见。唯一可以找到它存在的地方是在日志中,或者在删除它之前取出一个早期版本。

我知道处理此问题的最简单方法是远离命令行,并使用TortoiseSVN等GUI工具。

TortoiseSVN将自身链接到标准Windows文件资源管理器中,因此它非常易于使用。在回答这个问题的背景下,你仍然会用它来查看日志,但它会变得更加快速:

浏览器到要检查的SVN文件夹。然后右键单击文件夹图标并选择 TortoiseSVN - &gt;从上下文菜单中查看日志

现在,您将看到一个窗口,显示该文件夹中的所有修订。特别是,很容易看出哪些修订有添加和删除,因为该列表包含每个修订的一组Action图标。您可以双击修订版以获取已更改的文件列表(如果只更改了一个文件,则直接进入差异视图)

因此,您可以轻松查看哪些修订已删除,您可以快速单击它们以找出涉及的文件。这真的很容易。

我知道你在询问命令行,但对于像这样的管理任务,GUI浏览器确实有意义。与试图阅读隐藏文本的页面相比,它可以更快地看到正在发生的事情(无论您在读取该文本时有多精通)。

答案 2 :(得分:2)

这个问题是前一段时间发布和回答的。 在这个答案中,我将尝试展示一种灵活的方式来获取信息并扩展它。

在cygwin中,将svn log ${REPO_URL} -v --search "${FILENAME}"awk

结合使用
awk
  • ${FILENAME}向svn log询问包含$ {FILENAME}的详细日志。这减少了数据传输。
  • 结果通过管道传送到-vvar var="^ [D] ${FILENAME}$"通过awk中的/^r[0-9]+/ {rev=$1}与搜索模式rev
  • 一起传递/^r[0-9]+/
  • 如果行匹配^ [D] ${FILENAME}$,则rev计划$0 ~ var {print rev $0}会将修订号指定为D
  • 对于匹配var="^ [D] ${FILENAME}$"的每一行,awk会打印存储的修订号DAMR和行:svn log ${REPO_URL} -v --search "${FILENAME}" | \ awk -v var="^ [DAMR] ${FILENAME}$" \ '/^r[0-9]+/ {rev=$1}; \ $0 ~ var {print rev $0}'

如果您不仅对删除文件感兴趣,而且还对svn log ${REPO_URL} -v --search "${FILENAME}" | \ awk -v var="^ [DAMR] ${FILENAME}$" \ '/^r[0-9]+/ {rev=$1;user=$3;date=$5;time=$6}; \ $0 ~ var {print rev " | " user " | " date " | " time " | " $0}' 中{{1}}中{{1}}的创建,修改,替换和更改感兴趣。

以下内容将为您提供所有更改:

{{1}}

如果您对用户名,日期和时间感兴趣:

{{1}}