Windows SVN:如何知道删除文件的版本?
鉴于我在Windows上使用svn命令行,如何查找删除文件的修订号?在Windows上,并没有像grep和我这样的花哨东西试图只使用命令行,而不使用OrtoiseSVN。提前谢谢 编辑:Windows SVN:如何知道删除文件的版本?,windows,svn,command-line,Windows,Svn,Command Line,鉴于我在Windows上使用svn命令行,如何查找删除文件的修订号?在Windows上,并没有像grep和我这样的花哨东西试图只使用命令行,而不使用OrtoiseSVN。提前谢谢 编辑: 我看到了一些帖子,比如,但没有回答我的问题 除了svn log-v url>log.out和用记事本搜索之外,还有其他方法吗 日志是查看的地方。我知道你不想听到这个答案,但这就是你需要在SVN中查找已删除文件的地方 原因很简单,删除的文件在删除后不可见。要知道它的存在,唯一的地方就是在日志中,或者在删除之前取
- 我看到了一些帖子,比如,但没有回答我的问题
- 除了svn log-v url>log.out和用记事本搜索之外,还有其他方法吗
- 日志是查看的地方。我知道你不想听到这个答案,但这就是你需要在SVN中查找已删除文件的地方
原因很简单,删除的文件在删除后不可见。要知道它的存在,唯一的地方就是在日志中,或者在删除之前取出一个早期版本
我所知道的处理这个问题的最简单的方法是离开命令行,使用GUI工具,如
TortoiseSVN将自己链接到标准的Windows文件资源管理器中,因此非常易于使用。在回答这个问题的上下文中,您仍然可以使用它查看日志,但它变成了一个更快的练习:
浏览到要检查的SVN文件夹。然后右键单击文件夹图标,从上下文菜单中选择OrtoiseSVN->查看日志
现在,您将看到一个窗口,显示该文件夹中的所有修订。特别是,很容易看到哪些修订有添加和删除,因为列表中包含了每个修订的一组操作图标。您可以双击修订以获取已更改文件的列表(如果仅更改了一个文件,则直接进入差异视图)
因此,您可以很容易地看到哪些修订已被删除,并且可以快速单击它们以找出涉及哪些文件。这真的很容易
我知道你问的是命令行,但是对于这样的管理任务,GUI浏览器确实有意义。与阅读一页又一页的晦涩文字相比(无论您阅读这些文字的熟练程度如何),它可以更快地查看正在发生的事情。安装Cygwin
我用这个:
svn log -v --limit <nr> -v | grep -E '<fileName>|^r' | grep -B 1 <fileName>
这将为您提供与文件有关的所有操作(添加、删除、删除、修改)的修订,但只需使用grep
进行简单调整,您就可以获得仅用于删除的修订
(很明显,-limit是可选的,但是您通常会对需要搜索多深才能获得一些性能有一个大致了解。)这个问题在一段时间前发布并回答过。 在这个回答中,我将尝试展示一种灵活的方式来获取所需信息并加以扩展 在cygwin中,结合使用
awk
REPO_URL=https://<hostname>/path/to/repo
FILENAME=/path/to/file
svn log ${REPO_URL} -v --search "${FILENAME}" | \
awk -v var="^ [D] ${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}'
我确实看到了,但这并不是我的答案。无论如何谢谢。使用
svn log-v url>log.out
输出修订的详细信息,然后使用find
甚至记事本在log.out中搜索。此外,也不难找到适用于windows的grep版本。谢谢Lynch。我也考虑过。在我看来,这看起来很笨重:)@Lynch的答案非常有效。@Vieta-选项是有的,但正如你所发现的,它们是冗长的。这就是GUI工具如此有用的原因。CLI工具最适合编写脚本,但如果您想以交互方式管理某些内容,只需使用GUI即可。坦白地说,如果我必须通过CLI做所有事情,SVN会把我逼疯的。我也感觉到了。好奇的是,在阅读和解析日志以找到匹配项时,陆龟是如何做出如此灵敏的反应的。实际上,我花了一段时间才从svn日志中获得输出。@Viet-我认为spped是因为它需要的信息缓存在.svn文件夹中。(但手动读取比日志输出更难理解)。在Windows上安装Git命令行软件包时,它还会安装一套常见的Unix/GNU工具,如grep
甚至bash
。现在,您可以在您的PC上执行Unix管理员所做的所有操作。您还可以安装Cygwin,在您的PC上安装一个完整的类Unix环境。这包括Subversion命令行、grep和bash。我几乎总是在我的Windows PC上安装Cygwin,而且很多时候,我只是生活在Cygwin环境中。注意:不要在WIndows和Cygwin上与svn
共享您的工作副本。它可能会很混乱。虽然这很有帮助,但如果包含文件的目录被删除,它似乎不起作用:(
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}'