【问题标题】:TortoiseSVN from the command line and "IF ERRORLEVEL"?TortoiseSVN 从命令行和“IF ERRORLEVEL”?
【发布时间】:2009-07-23 21:12:29
【问题描述】:

我有一个批处理文件,我从带有 Service Pack 3 的 Windows XP 工作站运行,它使用 SQL 2005 中的 sqlcmd.exe 将 SQL 更改应用于数据库。

我有一个 TortoiseSVN 的命令行条目,可以像这样自动更新我的存储库的本地副本:

tortoiseproc /command:update /path:"C:/SVN/My Code/Dev/2009.07.23" /closeonend:3

根据the documentation,如果在更新过程中出现任何错误、冲突或合并,/closeonend:3 选项将使 TortoiseSVN 对话框保持打开状态。

如果确实发生了这种情况,并且用户在没有解决问题的情况下关闭了对话框,他们可能会忽略我们希望应用于给定分支的测试数据库的更改。

当 TortoiseSVN 对话框因更新后出现错误、冲突或合并而关闭时,ERRORLEVEL 是否会设置为某个 非零 值,从而启用我绕过批处理文件的其余部分?或者它是否会高兴地返回 0 以表明它已成功完成工作,即使代码不太正确?

【问题讨论】:

  • 我实际上只是测试一下。在本地创建一个虚拟存储库,C:\Temp\Svn 或其他东西,将其签出到两个目录,将文件添加到其中一个并提交,然后更新另一个,更改两个文件中的文件,提交一个,然后运行你的批处理文件,看看会发生什么。
  • 你为什么不用svn.exe?我错过了什么吗?
  • 这是我的第一个想法,但我宁愿尝试使用 Tortoise 的可执行文件来完成这一切,而不必持续维护 Tortoise 和 SVN;谁知道一个人是否在某个时候做出了一些改变,从而以某种微妙或痛苦的方式破坏了另一个人的功能。
  • Lasse,按照您的描述进行测试后,返回的 ERRORLEVEL 始终为 0(这是 TortoiseSVN 版本 1.6.3,Build 16613),所以我想我会在运行批处理之前手动更新并确保没有错误、冲突或合并仍未解决,除非有人知道解决此问题的方法。我想我可能会构建自己的包装器 EXE,它可以查看 Tortoise 的实际结果窗口对话框,如果它在文本中找到其中一种情况(使用 Windows 消息传递来挂钩并拦截输出),就放弃。

标签: tsql tortoisesvn batch-file errorlevel


【解决方案1】:

老问题,不过我今天也遇到了同样的问题,有解决办法...

TortoiseProc 在错误时返回 -1,在成功时返回 0,所以以下解决了我的问题:

TortoiseProc /path:"%targetdir%" /command:update /closeonend:3
IF %ERRORLEVEL% NEQ 0 goto SvnError

:SvnSuccess
echo It worked!
goto Done

:SvnError
echo It didn't work!

:Done

【讨论】:

    【解决方案2】:

    我最终只是在执行批处理文件中的其他操作之前手动更新了本地 SVN 存储库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2010-12-10
      • 1970-01-01
      相关资源
      最近更新 更多