我在Windows服务器上运行VisualSVN。
我正在尝试添加一个post-commit钩子来在发生提交时更新我们的暂存项目。
在VisualSVN中,如果我在hook / post-commit对话框中输入命令,那么一切都很有效。
但是,如果我使用完全相同的命令创建批处理文件,则会收到一条错误消息,指出提交后挂钩失败。没有其他信息。
我的命令使用绝对路径。
我已经尝试将批处理文件放在VisualSVN / bin目录中,我在那里得到了同样的错误。
我已确保VisualSVN对批处理文件所在的目录具有权限。
我唯一能想到的是我没有正确地从VisualSVN中调用它。我只是用批处理文件名替换了钩子/后提交对话框中的svn update命令(“c:\ VisualSVN \ bin \ my-batch-file.bat”)我试过它有没有路径(没有路径它根本找不到文件)。
我是否需要在SVNCommit对话框中使用不同的语法来调用批处理文件?在批处理文件中怎么样(它只有我的svn更新命令。如果我从命令行运行批处理文件,它可以工作。)
最终我想使用批处理文件,因为我想在提交后再做一些事情。
答案 0 :(得分:1)
使用VisualSVN时>选择回购>属性>钩子>提交后挂钩。 我用于发送电子邮件然后运行脚本的代码在哪里,该脚本包含我想要自定义的命令
"%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
脚本文件是用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
我添加了评论来解释每一行及其作用。简而言之,脚本:
这是将新提交的代码部署到网站的简单方法。
答案 1 :(得分:0)
您是否尝试使用'call'命令执行批处理文件?我的意思是:
call C:\Script\myscript.bat
答案 2 :(得分:0)
我正在尝试同样的事情,发现你还必须在hooks文件夹中有脚本.. bat文件是。