2

我在 Windows 服务器上运行 VisualSVN。

我正在尝试添加一个提交后挂钩,以便在提交发生时更新我们的暂存项目。

在 VisualSVN 中,如果我在钩子/提交后对话框中键入命令,一切都会很好。

但是,如果我使用完全相同的命令创建批处理文件,则会收到一条错误消息,提示 post-commit 挂钩失败。没有其他信息。

我的命令使用绝对路径。

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

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

我唯一能想到的是我没有从 VisualSVN 正确调用它。我只是用批处理文件名(“c:\VisualSVN\bin\my-batch-file.bat”)替换钩子/提交后对话框中的 svn update 命令我已经尝试过使用和不使用路径(没有路径它根本找不到文件)。

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

最终我想使用批处理文件,因为我想在提交后做更多的事情。

4

3 回答 3

1

使用 VisualSVN 时 > 选择 Repo > Properties > Hooks > Post-commit hook。我用于发送电子邮件然后运行脚本的代码在哪里,其中包含我想要自定义的命令

 "%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

我添加了注释来解释每一行及其作用。简而言之,脚本:

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

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

于 2017-10-17T15:19:38.367 回答
0

我正在尝试同样的事情,发现您还必须在 hooks 文件夹中有脚本.. bat 文件。

于 2013-03-13T17:27:24.187 回答
0

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

call C:\Script\myscript.bat
于 2010-06-23T16:08:04.103 回答