csjoz11

导航

svn

________________________________________________________创建版本库
c:\svn\bin>svnadmin create c:\app\test
________________________________________________________
post-commit.bat
@echo on
SET REPOS=%1
SET REV=%2
SET DIR="D:\admin\web1"
SET PATH=%PATH%;
SET SVN="D:\svn\bin\svn.exe"
SET WORKING_COPY="D:\admin\web1"
(call %SVN% update %DIR% --username csj --password csj --non-interactive)
 
主机的服务器版本和客户端版本要一致,1.6.5
 
————————————————————

服务器端获取代码到网站根目录是通过用户每次commit代码时触发post-commit的hook来实现的,因此下面要编写post-commit脚本,该脚本的作用是将版本库中的最新代码检出到网站根目录。首先在服务器上某个位置创建目录wwwtest作为网站根目录,配置好目录的权限,为了方便我使用的是最高权限,对于外网限制严格的长江大学来说开发期的网站根目录设置最高权限是无伤大雅的,待到开发完毕再修改相应的权限便可。废话少说post-commit脚本如下:

 

 

@echo on

SET REPOS=%1

SET USER=%2

SET SVN="D:\Program Files\TortoiseSVN\bin\svn.exe"

SET DIR="C:\Users\rex\Desktop\test"

(call %SVN% update %DIR% --username local --password 123 --non-interactive)

其中SVN变量是svn.exe主程序的路径,DIR为代码检出目录(即后面要用的wwwtest网站根目录)在服务器端的话可能并不在TortoiseSVN下,而是在VisualSVN的某个目录下,具体位置自己找。脚本编写完成后保存为post-commit.bat。

 

对服务器端的网站根目录[上面提到的wwwtest目录]使用TortoiseSVN(随自己的习惯选择软件)执行首次的checkout命令。下面测试上述脚本的的正确性:首先在客户端通过svn上传一些文件到svn服务器,到服务器端执行上述脚本文件post-commit.bat。进入test目录检查是否将刚上传的文件导出到了wwwtest目录。(PS:若是用cmd执行post-commit.bat可以看到提示信息,能够很明确的看到是否执行成功)用脚本导出成功。下面将post-commit.bat脚本拷贝到服务器的Repositores/test/hooks文件夹下。重启svn服务,从客户端commit更新到服务器,那么网站根目录下面将会同步更新。

 

另:

TortoiseSVN 提交时 hook 的 post-commit.bat 不执行的解决方法

 

TortoiseSVN 提交到 VisualSVN Server 时 hook 的 post-commit.bat 不执行的解决方法:

这是因为 bat 文件执行需要权限,而 VisualSVN Server 默认用的是 NETWORK 用户组,该组没有执行 bat 的权限,导致了 post-commit.bat 文件不能执行,解决方法如下:

 

我的电脑-管理-服务:

VisualSVN_Server Service

将 VisualSVN Server 服务运行于超级管理员权限,然后重启这个服务。

问题到此解决了~!

 

 

如果运行不能正常,可以通过下面的方法看到出错信息:

将刚才的post-commit.bat改名为post-commit-run.bat,然后再建一个post-commit.bat的文件,里面写入如下的代码:

call %~dp0post-commit-run.bat %* > %1/hooks/post-commit.log 2>&1

这样运行结果就会被写入到post-commit.log文件中,如果出错,也可以找到出错的原因

posted on 2017-07-27 11:18  csjoz11  阅读(102)  评论(0编辑  收藏  举报