2

我在 Windows 7 x64 上使用 TortoiseSVN。我试图将 apost-commit.bat放在hooks存储库的文件夹中,但它根本不起作用。所以我尝试在 中放一个pre-commit.bat(内容与 完全相同post-commit.bathooks,效果很好。

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

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

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

4

1 回答 1

2

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

我认为您的提交无论如何都会发生。有几种可能性:

  • 你的钩子正在执行,但没有做任何事情。只要它以零退出状态退出,Subversion 就会认为一切都很糟糕。尝试一个名为的 Subversion 程序pre-commit.bat,它只包含该行exit 2。如果你仍然可以提交东西,那么你的钩子根本就不起作用。

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


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

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

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

于 2013-11-19T15:44:19.950 回答