Visualsvn server 带有批处理文件的VisualSVN提交后钩子

Visualsvn server 带有批处理文件的VisualSVN提交后钩子,visualsvn-server,post-commit,svn-hooks,Visualsvn Server,Post Commit,Svn Hooks,我正在Windows服务器上运行VisualSVN 我试图添加一个post-commit钩子,以便在提交发生时更新我们的登台项目 在VisualSVN中,如果我在hook/post-commit对话框中键入命令,一切都会很好地工作 但是,如果我使用完全相同的命令生成一个批处理文件,我会得到一个错误,表明post-commit钩子失败了。没有其他信息 我的命令使用绝对路径 我尝试将批处理文件放在VisualSVN/bin目录中,但在那里遇到了相同的错误 我已确保VisualSVN对批处理文件所在的

我正在Windows服务器上运行VisualSVN

我试图添加一个post-commit钩子,以便在提交发生时更新我们的登台项目

在VisualSVN中,如果我在hook/post-commit对话框中键入命令,一切都会很好地工作

但是,如果我使用完全相同的命令生成一个批处理文件,我会得到一个错误,表明post-commit钩子失败了。没有其他信息

我的命令使用绝对路径

我尝试将批处理文件放在VisualSVN/bin目录中,但在那里遇到了相同的错误

我已确保VisualSVN对批处理文件所在的目录具有权限

我能想到的唯一一件事是,我没有从VisualSVN正确地调用它。我只是将hook/post-commit对话框中的svn-update命令替换为批处理文件名(“c:\visualvn\bin\my batch file.bat”),我尝试过使用和不使用路径(没有路径,它根本找不到文件)

我是否需要在SVNCommit对话框中使用不同的语法来调用批处理文件?在批处理文件中如何(它只有我的svn update命令。如果我从命令行运行批处理文件,它就会工作。)


最终,我想使用批处理文件,因为我想在提交后再做一些事情

是否尝试使用“调用”命令执行批处理文件?我的意思是:

call C:\Script\myscript.bat

我尝试了同样的方法,发现你也必须在hooks文件夹中保存脚本。。使用VisualSVN>时的bat文件。

选择Repo>Properties>Hooks>Post-commit钩子。 我用来发送电子邮件然后运行脚本的代码在哪里?脚本中有我想要自定义的命令

 "%VISUALSVN_SERVER%\bin\VisualSVNServerHooks.exe" ^
    commit-notification "%1" -r %2 ^
    --from support@domainname.com --to "support@domainname.com" ^
    --smtp-server mail.domainname.com ^
    --no-diffs ^
    --detailed-subject
    --no-html

set PWSH=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
%PWSH% -command $input ^| C:\ServerScripts\SVNScripts\post-commit-wp.ps1 %1 %2
if errorlevel 1 exit %errorlevel%
脚本文件位于C:\ServerScripts\SVNScripts上\ post-commit-wp.ps1和我传入两个VisualSVN变量%1和%2

  • %1=serverpathwithrep
  • %2=修订号
脚本文件是在Windows PowerShell中编写的

# PATH TO SVN.EXE
$svn = "C:\Program Files\VisualSVN Server\bin\svn.exe"
$pathtowebistesWP = "c:\websites-wp\"

# STORE HOOK ARGUMENTS INTO FRIENDLY NAMES
$serverpathwithrep = $args[0]
$revision   = $args[1]

# GET DIR NAME ONLY FROM REPO-PATH STRING 
# EXAMPLE: C:\REPOSITORIES\DEVHOOKTEST
# RETURNS 'DEVHOOKTEST'
$dirname = ($serverpathwithrep -split '\\')[-1]

# Combine ServerPath with Dir name
$exportpath = -join($pathtowebistesWP, $dirname);

# BUILD URL TO REPOSITORY
$urepos = $serverpathwithrep -replace "\\", "/"
$url = "file:///$urepos/"


# --------------------------------
# SOME TESTING SCRIPTS
# --------------------------------

# STRING BUILDER PATH + DIRNAME
$name = -join($pathtowebistesWP, "testscript.txt");
# CREATE FILE ON SERVER
New-Item $name -ItemType file
# APPEND TEXT TO FILE
Add-Content $name $pathtowebistesWP
Add-Content $name $exportpath

# --------------------------------


# DO EXPORT REPOSITORY REVISION $REVISION TO THE ExportPath
&"$svn" export -r $revision --force "$url" $exportpath
我添加了注释来解释每一行及其作用。简而言之,这些脚本:

  • 获取所有参数
  • 构建本地dir路径
  • 运行SVN导出
  • 将文件放置到网站/发布目录

这是一种将新提交的代码部署到网站的简单方法。

然后尝试在脚本末尾添加“退出0”。我有一个批处理脚本,其中包含两个命令,分别称为svn cleanup C:\algit\web2py\applications/irazporedemo call svn update C:\algit\web2py\applications/irazporedemo,若我从cmd在服务器上运行它们,则可以,当我从tortoise运行我的svn更新时,我收到一个错误post commit hook失败退出代码0尝试写入只读数据库