在我们的SVN服务器(Windows VisualSVN服务器)上,我创建了一个Post-Commit脚本来自动更新服务器上的本地工作副本(用于预览)。Post-Commit脚本包含这样的内容。
svn.exe cleanup .....
svn.exe update .....
这很好用 然而,我们有一些较大的仓库,这需要一段时间。我想在提交时异步运行这个脚本。因此,我把SVN指令移到了一个外部批处理文件中,并尝试使用CMD C或Start命令来完成这个任务。
start "" "d:\svn\update-repository.bat"
或者
cmd /c "d:\svn\update-repository.bat"
甚至
start cmd /c "d:\svn\update-repository.bat"
并没有提供异步的性能。它仍然保持提交,直到服务器上更新整个仓库。
有什么好办法吗?
我认为svn服务器运行的命令在完成之前不会完全返回--这意味着原来的cmd将坐在那里允许你运行其他命令,但在其他情况下等待生成的cmd应完成。只有这样,"会话"(我不想用更好的词)才会完成,并将控制权返回给Subversion。
我会把你要运行的命令写到一个文件中,然后使用一个外部产卵的命令(例如一个计划任务)定期运行保存的命令(注意,每次执行后删除或重命名文件)。这样就可以从subversion服务器的处理中解耦出来。