Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows SVN:如何知道删除文件的版本?_Windows_Svn_Command Line - Fatal编程技术网

Windows SVN:如何知道删除文件的版本?

Windows SVN:如何知道删除文件的版本?,windows,svn,command-line,Windows,Svn,Command Line,鉴于我在Windows上使用svn命令行,如何查找删除文件的修订号?在Windows上,并没有像grep和我这样的花哨东西试图只使用命令行,而不使用OrtoiseSVN。提前谢谢 编辑: 我看到了一些帖子,比如,但没有回答我的问题 除了svn log-v url>log.out和用记事本搜索之外,还有其他方法吗 日志是查看的地方。我知道你不想听到这个答案,但这就是你需要在SVN中查找已删除文件的地方 原因很简单,删除的文件在删除后不可见。要知道它的存在,唯一的地方就是在日志中,或者在删除之前取

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

编辑:
  • 我看到了一些帖子,比如,但没有回答我的问题
  • 除了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}'