【问题标题】:How to setup VisualSVN post-commit hooks in win7 64bit如何在 win7 64bit 中设置 VisualSVN 提交后挂钩
【发布时间】:2012-09-26 13:54:24
【问题描述】:

我的提交后挂钩从未被触发,我认为这是因为
我需要设置一些文件系统权限。

我已安装 VisualSVN-Server-2.5.2 并使用 Subversion 插件运行 eclipse。

除了 VisualSVN 钩子触发之外,一切都按预期工作。

这是我的 post-commit.cmd 文件,名称为“post-commit.cmd”

C:\PROGRA~2\VISUAL~1\bin\myScript.cmd 
exit 0

更新 1 当我像这样放置“开始”文本时,提交窗口会冻结,并带有一个脉动的绿色进度条,就像它在等待钩子触发或某事一样。我不能
取消提交操作,但我可以关闭 eclipse 然后硬杀提交窗口。

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

更新 2

如果将存储库保存到本地硬盘,它就可以工作。当保存路径用于网络驱动器时,它不起作用。好的,这是向前迈出的一步。浴文件可能需要一些用户/密码

这是将存储库保存到本地硬盘的 bat 文件(感谢 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 存储库)都将作为同一个用户。换句话说,要警惕潜在的与权限相关的问题,这些问题可能会阻止挂钩执行其设计执行的任务。"

更新

【问题讨论】:

  • 嗨,Erik,您如何添加 VisualSVN 管理员用户,如屏幕截图所示?
  • 我现在不记得我是否这样做了。最终将提交后挂钩运行到本地硬盘,因为我从来没有在 NAS 上运行它
  • 它会起作用的,我知道了。 stackoverflow.com/a/17849729/1357033

标签: svn hook visualsvn svn-hooks


【解决方案1】:
  • VisualSVN 服务器服务在Network Service 帐户下运行 默认或在专用自定义帐户下(应创建 手动)。

  • Subversion 挂钩在 VisualSVN 服务器服务下执行
    帐号(Network Service 或专用帐号)

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

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

Subversion FAQ: Why aren't my repository hooks working?

【讨论】:

  • 用图片更新了我的问题。在图片中,我认为我已经正确设置了权限。图中,是VisualSvn的“服务帐号”吗??
  • 不,您在权限对话框中显示的帐户是VisualSVN Server Admins。此帐户用于通过 VisualSVN 服务器管理器为域用户提供对 VisualSVN 服务器的远程访问。
  • 要验证用于运行 VisualSVN 服务器服务的帐户,您应该转到 services.msc,在列表中找到 VisualSVN 服务器 并检查它的“登录”设置。默认情况下应该是Network Service(但是在瑞典语中可能拼写不同)。
  • 是的,正如您在查看 services.msc 时所说的那样,它是“网络服务 (Nätverkstjänst)”。我设置了完全权限,但没有触发。就像图片展示一样。还有什么想法吗?
  • 查看文件夹权限:F:\Repositories\, f:\druidBACKUP\SVN\, f:\druidBACKUP\SVN\。 VisualSVN Server 服务帐户(“网络服务 (Nätverkstjänst)”)是否有权访问这些文件夹?
猜你喜欢
  • 2013-03-17
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多