首先您需要了解,如果不连接到服务器,就无法知道服务器上是否发生了更新。因此,您不能仅仅通过查看本地文件夹来做到这一点,因为这不是 svn 的工作方式。
实现您想要的解决方法如下。在服务器上,编写一个“post-commit”钩子,它从文本文件中获取一个计数器,将其递增,然后将其写回。将此文本文件存放在您的客户可以下载的地方。我假设这将在“http://www.example.com/commit-id.txt”上。然后,在客户端上,使用 shell 脚本来监视此文本文件的更改并执行所需的操作。例如,使用 windows powershell 可以按如下方式工作。对于 Mac,您需要使用不同的 shell,但我确信这个脚本可以很容易地移植。
function get-current-commit-id {
trap [Exception] {
# Make sure the script doesn't freak out when server is down or connection
$commitid
return
}
# The rand.next() ensures by brute force that the text file is not cached
[int] $clnt.DownloadString("http://www.example.com/commit-id.txt?q="+$rand.next())
}
$clnt = new-object System.Net.WebClient
$commitid = get-current-commit-id
while( 1 ){
$commitidnew = get-current-commit-id
if( $commitidnew -ne $rsid ){
Write-Output "Commit occured on server"
### execute desired action here
### perhaps you'll also want to run "svn up"
$commitid = $rsidnew
}
### check for new update every 10 seconds
sleep 10
}