TortoiseSVN post-commit.bat不';行不通

TortoiseSVN post-commit.bat不';行不通,svn,version-control,tortoisesvn,pre-commit-hook,svn-hooks,Svn,Version Control,Tortoisesvn,Pre Commit Hook,Svn Hooks,我在Windows7x64上使用OrtoiseSVN。 我试图将一个post commit.bat放在存储库的hooks文件夹中,但它根本不起作用。因此,我尝试将预提交.bat(内容与后提交.bat完全相同)放入钩子,效果很好 这很奇怪。.bat文件非常简单,我只是尝试了: @echo off setlocal set REPOS=%1 set TXN=%2 xcopy C:\a C:\b\ /S /F exit 0 是否有人使用TortoiseSVN进行提交后工作?问题不是Tortois

我在Windows7x64上使用OrtoiseSVN。 我试图将一个
post commit.bat
放在存储库的
hooks
文件夹中,但它根本不起作用。因此,我尝试将
预提交.bat
(内容与
后提交.bat
完全相同)放入
钩子
,效果很好

这很奇怪。.bat文件非常简单,我只是尝试了:

@echo off
setlocal
set REPOS=%1
set TXN=%2  
xcopy C:\a C:\b\ /S /F
exit 0

是否有人使用TortoiseSVN进行提交后工作?

问题不是TortoiseSVN问题,而是服务器问题。存储库存储在哪里?你用的是什么服务器?您使用的是
svnserve
还是
httpd

我认为你的承诺无论如何都会发生。有几种可能性:

  • 你的钩子正在被执行,但什么也没做。只要Subversion以零退出状态退出,它就会认为一切都很好。尝试一个名为
    pre-commit.bat
    的Subversion程序,该程序只包含行
    exit 2
    。如果您仍然可以提交内容,那么钩子就根本不起作用

  • 你的钩子没有被执行。Subversion执行
    hooks
    目录中的程序
    pre-commit
    。Windows上有一个名为
    PATHEXT
    的环境变量,其中包含将附加到文件以查找可执行文件的后缀。通常,它会尝试
    *.com
    *.exe
    ,然后尝试
    *.bat
    。如果该
    hooks
    目录中存在
    pre-commit.exe
    pre-commit.cmd
    ,则不会执行您的
    pre-commit.bat
    。检查执行Subversion服务器的用户的
    PATHEXT
    值,并确保设置正确


其中一个问题是Subversion的钩子会吃掉STDOUT,并且只有在钩子失败时才会显示STDERR。这使得钩子对于用户来说非常难以沟通,如果您在执行时依赖于打印输出,您可能会感觉到钩子没有做任何事情

将内容打印到STDERR而不是STDOUT。有一种方法可以强制钩子失败,这样在需要时可以看到STDERR


我也不建议在Windows上的批处理脚本中编写钩子。这根本不适合做这种工作。使用Python或Perl。或者,如果您确实是面向PC的,并且不想在服务器上安装Python或Perl,请使用PowerShell,这是一种功能强大但未充分利用的Windows编程语言。

我刚刚发现post-commit.exe可以工作,但post-commit.bat不能工作。我不知道为什么。TortoiseSVN是一个Subversion客户端,而不是服务器。请详细说明你的问题。