如何在Win7 64位系统上设置VisualSVN提交后钩子

4
我的提交后钩子从未被触发,我认为这是因为需要设置一些文件系统权限。我已经安装了VisualSVN-Server-2.5.2,并在Eclipse中使用Subversion插件运行。除了VisualSVN钩子触发之外,一切都按预期工作。这是我的名为“post-commit.cmd”的post-commit.cmd文件。
C:\PROGRA~2\VISUAL~1\bin\myScript.cmd 
exit 0

更新1 当我像这样输入“start”文本时,提交窗口会冻结,带有一个脉动的进度绿色条,就像它在等待挂钩触发或某种东西。我无法取消提交操作,但我可以关闭eclipse,然后强制关闭提交窗口。

start C:\PROGRA~2\VISUAL~1\bin\post-commit.cmd
exit 0

更新2

如果我将存储库保存到本地硬盘,它可以正常工作。只有当保存路径为网络驱动器时才无法正常工作。好的,这是一个向前迈出的步伐。批处理文件需要一些用户/密码。

以下是将存储库保存到本地硬盘的批处理文件(感谢Christopher C. Simmons (CCS))

@ECHO OFF
CLS
:: =================== COPYRIGHT ========================================= 
:: File:          svn_backup.bat
:: Author:        Christopher C. Simmons (CCS)
:: Date:          05.01.2008
:: Purpose:       To make backups ("hot copies") of multiple SVN repos
:: History:       0.1 Initial Release
:: Assumes:       Your path contains: C:\Program Files\Subversion\bin
::                Your repodir contains only repos
:: Copyright:     2008 csimmons.net
::                
:: NOTICE!!!
:: csimmons.net, LLC supplies this software AS IS and makes no guarantees
:: for your use of it. csimmons.net, LLC is not responsible for any damage
:: or pain the use of this product may cause you.  Please give credit if 
:: you use this or create a derivative work.
:: =================== COPYRIGHT =========================================

:: =================== CONFIG ============================================
:: Path of the dir containing your repos [Note Trailing slash]
SET repodir=F:\Repositories\
:: Path of the dir in which to create you hotcopies [Note Trailing slash]
SET repodirhot=f:\druidBACKUP\SVN\
:: Path for log file [Note Trailing slash]
SET logdir=f:\druidBACKUP\SVN\
:: Path for svnadmin [Note Trailing slash]
::SET svnpath=C:\PROGRA~2\VISUAL~1\bin\svnadmin.exe
:: User mode - 1=Interactive | 0=NonInteractive
SET imode=1
:: =================== CONFIG ============================================

:: =================== SCRIPT ============================================
:: !!! NO NEED TO EDIT BEYOND THIS POINT !!!

:: Make a date_time stamp like 030902_134200
SET hh=%time:~0,2%

:: Add a zero when this is run before 10 am.
IF "%time:~0,1%"==" " set hh=0%hh:~1,1%
SET yymmdd_hhmmss=%date:~12,2%%date:~4,2%%date:~7,2%_%hh%%time:~3,2%%time:~6,2%

:: Make a name for the log file
SET repolog=%logdir%%yymmdd_hhmmss%repobackup.log

:: Start log
ECHO START %date% %time% >> %repolog%

:: IF a  hotcopy exists delete it first ELSE
:: Create directories and svn hotcopy repos to them
FOR /F %%G IN ('dir /b /ad %repodir%') DO ^
IF EXIST %repodirhot%%%G (rmdir /S /Q %repodirhot%%%G & mkdir %repodirhot%%%G >> %repolog% & ^
ECHO Starting SVN backup for %%G... >> %repolog% & ^
C:\PROGRA~2\VISUAL~1\bin\svnadmin hotcopy %repodir%%%G %repodirhot%%%G --clean-logs >> %repolog% & ^
IF %imode%== 1 ECHO FINISHED...%%G) ^
ELSE (mkdir %repodirhot%%%G >> %repolog% & ^
ECHO Starting SVN backup for %%G... >> %repolog% & ^
C:\PROGRA~2\VISUAL~1\bin\svnadmin hotcopy %repodir%%%G %repodirhot%%%G --clean-logs >> %repolog% & ^
IF %imode%== 1 ECHO FINISHED...%%G)

:: Finish log
ECHO END %date% %time% >> %repolog%
:: Display log message if interactive mode otherwise EXIT
ECHO Done... Logs available here: %repolog% 
if %imode%== 1 pause
:: =================== SCRIPT ============================================
EXIT 

这个想法是启动一个更大的脚本myScript.cmd,用来执行我的代码库的热备份。如果我手动启动post-commit.cmd,它可以工作。

在这里阅读说明书visualsvn.com

我不理解下面这段文本的实际操作:

“Subversion将钩子执行为与访问Subversion代码库的进程所有者相同的用户。在大多数情况下,代码库是通过Subversion服务器访问的,因此此用户是系统上运行服务器的用户。这意味着需要使用允许该用户执行它们的操作系统级权限来配置钩子。此外,这意味着直接或间接由钩子访问的任何程序或文件(包括Subversion代码库)都将以相同的用户身份访问。换句话说,请注意可能会防止钩子执行其设计任务的潜在权限相关问题。”

更新 Permission to set


嗨,Erik,你是如何添加VisualSVN管理员用户的,就像屏幕截图中显示的那样? - Mansoorkhan Cherupuzha
我现在不记得我是否这样做了。最终,我将 post-commit 钩子运行到本地硬盘驱动器上,因为我从未在 NAS 上使其工作。 - Erik
2
它会工作的,我明白了。 - Mansoorkhan Cherupuzha
1个回答

4
  • 默认情况下,VisualSVN Server 服务在 Network Service 账户下运行,或者在专门的自定义账户下运行(需要手动创建)。

  • Subversion 钩子在 VisualSVN Server 服务账户下执行(Network Service 或专门的账户)。

如果钩子脚本在手动启动时正常工作,则建议检查服务账户的权限。它应该可以访问 'C:\PROGRA~2\VISUAL~1\bin\myScript.cmd' 和所有其他相关文件。

请注意,在 Subversion 调用钩子脚本之前,它会从环境中删除所有变量,包括 Windows 上的 %PATH%。因此,如果您要运行另一个程序,您的脚本只能使用该程序的绝对路径名。

Subversion FAQ:为什么我的存储库钩子没有生效?


我在问题中更新了一张图片。在图片中,我认为我已经设置了正确的权限。在图片中,那是VisualSvn的“服务账户”吗? - Erik
1
不,您在权限对话框中显示的帐户是“VisualSVN Server Admins”。此帐户用于为域用户提供通过VisualSVN Server Manager远程访问VisualSVN Server的权限。 - bahrep
2
要验证运行VisualSVN Server服务所使用的帐户,您应该转到“services.msc”,找到列表中的VisualSVN Server并检查其“登录”设置。默认情况下,它应该是Network Service(但在瑞典语中可能拼写不同)。 - bahrep
1
请检查以下文件夹的权限:F:\Repositories, f:\druidBACKUP\SVN, f:\druidBACKUP\SVN\。VisualSVN Server服务账户(“Network Service (Nätverkstjänst)”)是否具有访问这些文件夹的权限? - bahrep
@bahrep,感谢您对NETWORK SERVICE文件权限的评论。 - Mansoorkhan Cherupuzha
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接