[英]Post commit hook for the svn update
我有一個存儲庫和一個工作副本。
在存儲庫的提交后掛鈎中,我編寫了一個命令來執行一個文件,該文件運行SVN update命令。
我的存儲庫位於/var/www/svnrepos/help/
我的工作副本在/var/www/autopostcommit/help/
提交后的文件位於/var/www/svnrepos/help/hooks/
在提交后,我寫了以下命令
sudo /usr/local/bin/svn-post-commit-update 1>&2
在/ usr / local / bin中的svn-post-commit-update
文件中,我編寫了以下命令。
cd /var/www/autopostcommit/help/
svn update --non-interactive --trust-server-cert \
--username satish@108.166.92.199 --password mypassword
我也嘗試了其他版本的命令來進行更新,例如沒有密碼和全部。
SVN提交給我以下錯誤
Error: sudo: no tty present and no askpass program specified
我如何克服這個錯誤?
您已將sudo
配置為要求輸入密碼,而在提交后的鈎子中則無法執行此操作。 修復似乎很簡單:重新配置sudo
這樣就不會要求您輸入密碼。
謹慎的人還是不想以root
身份運行提交后的鈎子。
您需要找到其他方法以正確的用戶身份執行腳本。 也許讓腳本setuid對您來說是一個選擇? http://en.wikipedia.org/wiki/Setuid
然后,您可以刪除sudo。
真正的問題:您要做什么?
當您執行提交后鈎子時,正在執行提交的用戶必須等待直到完成。 如果您嘗試更新遠程工作目錄,則用戶將非常不高興,因為每次他們進行一次提交時,都需要花費10到20秒的拇指時間來使用戶恢復計算機。
最好不要將某些事情當作鈎子。 而是使用crontab條目,該條目僅每分鍾檢查一次存儲庫是否有更新,並且如果有更新,則執行所需的任何操作。
我認為您正在更新網頁。 我的建議是:請勿使用svn update
。 取而代之的是使用svn export
,它將刪除所有.svn
文件(我認為版本1.7不再那么糟糕)。 我建議做的是兩個目錄策略:
您不會直接更新/var/www/autopostcommit/help/
。 相反,您將svn update
到另一個目錄,然后在更新完成后,將/var/www/autopostcommit/help
移至其他位置,並將已導出的目錄移至/var/www/autopostcommit/help/
。 這樣,您的/var/www/autopostcommit/help
目錄就不會處於兩次修訂之間的中間狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.