从提交后的svn导出在窗口上不起作用?

时间:2010-10-11 14:11:58

标签: windows svn batch-file post-commit

我正在Windows环境中设置SVN服务器: 无论何时制作标签,提交后脚本都会导出有关标签的一定数量的信息(如作者,评论,依赖关系......)。

我还想附加标记存储库中的特定文件。为此,我一直在尝试“svn export”命令。这对于“模拟”标记很好,但是使用svn客户端(乌龟)不起作用。

svn export --username foo --password bar svn://localhost/My_SVN_DB/tags/My_Tag/My_File.txt My_Export_Directory

我检查了以下内容:

  • 命令的语法 - >似乎没问题,它在调用post commit并传递测试参数时起作用
  • My_Export_Directory的访问权限 - >似乎没问题,因为脚本也写了一个调试文件

现在我想知道在执行post commit脚本时标签结构是否已经存在? (我以为是......?)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

重定向标准输出&标准错误有助于找到问题:

svn export --username foo --password bar svn://localhost/My_SVN_DB/tags/My_Tag/My_File.txt My_Export_Directory > tmp.log 2>&1

问题来自导出前的一个声明。使用for / f循环提取数据库名称并覆盖临时循环变量(DBNAME)。

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Extract the DB name
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
setLocal EnableDelayedExpansion
for /f "tokens=4 delims=\" %%a in ("%REPOS%") do (set DBNAME=%%a)
echo !DBNAME!>%TMPFILE%
endlocal
REM Here is the problem
set /p DBNAME=<%TMPFILE%

通过将最后一个变量名修改为DBNAME2:

set /p DBNAME2=<%TMPFILE%

该脚本能够正常工作。

我仍然很不清楚为什么会发生这种情况,因为同样的技巧(对于/ f + overwrite)也用于预提交脚本,并且它可以正常工作。任何想法??