簡體   English   中英

發布提交鈎子以進行svn更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM