我真的覺得@Larsks的回答足夠實際,足以提供一個幾乎原子和需要的解決方案,所以我保持他的答案爲「正確」,但認爲我會繼續ribute考慮This Post考慮還有:
假設MV完全原子時,post-commit鉤子慶典看起來是這樣的:
svn export file:///svn/repo /var/www/projectdir_NEW --force
mv /var/www/projectdir /var/www/projectdir_OLD
mv /var/www/projectdir_NEW /var/www/projectdir
rm -rf mv /var/www/projectdir_OLD
的唯一的事情就是2個MV命令之間的一些分裂秒,這是最接近原子和最乾淨的方式來做到這一點...但是,對於完全原子的影響,讓我們說我不介意使用一點PHP,因爲我的項目有一個全局init.php,提交後可以這樣做:
date > /var/www/projectdir.updating
svn export file:///svn/repo /var/www/projectdir_NEW --force
mv /var/www/projectdir /var/www/projectdir_OLD
mv /var/www/projectdir_NEW /var/www/projectdir
rm -rf mv /var/www/projectdir_OLD
rm /var/www/projectdir.updating
創建一個TEM所謂「projectdir.updating」在它的日期porary文件,執行更新,然後刪除臨時文件,現在我可以用我的init.php來「節流」的任何請求:
while (file_exists("/var/www/projectdir.updating")) usleep(200);
而且我可以檢查保存在臨時文件中的日期詳細信息用於退出時出現錯誤...(如果導出失敗以刪除.updating文件)
另請參閱,這是一個使用符號鏈接的類似想法。 –
larsks
這樣一個簡單的解決方法,奇怪的我從來沒有想到......一直處於壓力之下:S非常感謝 – Prof83