2010-12-01 76 views
0

我在Windows机器上运行SVN回购协议。我需要一个脚本将任何提交的文件上传到远程Web服务器。我已经阅读了预先提交的钩子,但我不知道如何实际编写脚本,甚至不知道应该使用哪种语言编写脚本。似乎脚本需要运行.bat或.exe才能运行在窗口中。SVN预先挂钩FTP在Windows上载

有没有人有脚本可以在Windows机器上运行?我不打算上传整个网站,而是上传个人文件。我想要一个预先提交的钩子,因为如果ftp上传失败,会给用户反馈。

如果您之前已经完成了此操作,请将整个过程解释为newb。

回答

1

我认为你需要一个post-commit钩子。

一个svn钩子确实可以是任何可执行文件或脚本文件。 Look here for some samples

您可以在Windows上使用内置的命令行ftp客户端。一种方法是将您的FTP命令放入一个文本文件中,您可以从批处理文件中生成该文件。例如:

echo [username]>ftp.txt 
echo [password]>>ftp.txt 
echo put [filename]>>ftp.txt 
echo quit>>ftp.txt 

ftp -s:ftp.txt [server] 

当然,你也可以编写一个程序来做到这一点(例如在.NET中,使用FtpWebRequest类),它并没有成为一个批处理脚本。

+0

不,我需要预先提交。否则,FTP上传失败,但提交,我搞砸了。 – Liquidgraph 2010-12-01 22:01:31

+0

这些样本都不涉及FTP上传。另外,你可以详细说明如何通过钩子脚本在windows中使用内置命令行ftp客户端吗? – Liquidgraph 2010-12-01 22:03:02

3

当您希望因某种原因导致提交失败时,使用预提交挂钩。你真的想失败一个提交是因为你的FTP站点已关闭,或磁盘已满?

您应该只使用预先提交脚本来处理由开发人员控制的东西,例如缺少所需属性的文件等。这使开发人员有机会纠正问题,然后重新提交提交。

当用户的终端等待它完成时,post-commit脚本仍然会绑定用户的终端,但是脚本可能会失败并通知用户某些事情失败了,但无论如何都会发生提交。如果你想用钩子来做到这一点,你应该使用post-commit钩子而不是预先提交钩子来完成它。


对于你想做的事情,钩子并不是一个好的方法。如果用户提交大量文件会怎么样?当你的钩子脚本执行时,他们必须坐在那里十几分钟吗?

一个更好的主意是使用像Hudson这样的连续构建系统。 Hudson会观察你的Subversion版本库,并且可以在用户每次提交时执行你想要的FTP任务。有了Hudson,在开发者等待挂钩完成时你并没有被捆绑在一起,并且你可以完整记录每一次提交的情况。

事实上,每个网站都应该使用连续构建服务器。即使你不编码编码,你仍然想对每个提交运行测试。

哈德森甚至有FTP和SFTP插件,这可能会使您的任务更容易做到。而且,您可以在Hudson中调用预生成和后生脚本,这样您就可以灵活地执行您的心愿。

Hudson在Windows服务器和Unix服务器上运行。这是一个Java过程。


如果您使用的是Windows,和你没有PowerShell的,你应该下载一些脚本语言,你用它来写你的钩子。 Windows command.exe处理器中的标准批处理编程语言不是非常灵活或强大。由于钩子在服务器上运行,所以只需要担心钩子是否在单台机器上运行。某些程序使用客户端钩子,如果您编写钩子,它必须能够在客户端可能使用的每个单一系统上运行。