理想情况下,我正在寻找一种无状态的方式来执行此操作,因为我使用的是批处理文件。
场景是我在接收用户推送的服务器上有一个存储库。repo 也是一个工作副本,它是 wiki 页面 (dokuwiki) 的来源,它只是存储库中的文本文件,wiki 中的每个页面都有一个。
因为这是在 Web 服务器上,所以任何人都不会交互式地使用工作副本。相反,批处理文件会定期运行并发出适当的命令,以使用已推送到存储库的最新更改来更新工作副本。作为实现的附带说明,它还接受来自 wiki 对工作副本的更改,并尝试同时合并和提交它们。
批处理文件如下所示:
@echo off
cd \dokuwiki\data\directory
start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"
for /r %%x in (*.jpg *.png *.gif) do copy /y "%%x" ..\..\media\directory
这适用于文本文件,但 dokuwiki 要求将图形等媒体存储在另一个目录中,这是最后一条for
语句的用途。
请注意,到目前为止,我并不关心脚本的改进。它已被审查为我们在此环境中进行更新的理想方式。
最后副本的问题是它会复制所有图形,无论它们是否已更改。显然,最好只复制已更改的图形。由于自上次更新以来可能已经多次推送到此存储库,我只想识别和复制自上次更新此工作副本以来已更改的那些图形,即上次运行此脚本的时间hg update
。
我想不出一种直观的方法来做这件事。如果在脚本运行之间不需要手动保存信息,那将是最好的,但这并不是不可能的。