鉴于我在Windows上使用svn命令行,如何查找文件被删除的修订号?在Windows上,没有像grep这样的花哨的东西,我试图只使用命令行,没有TortoiseSVN。提前谢谢!
答案 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}的详细日志。这减少了数据传输。-v
。 var
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}}