2012-10-16 46 views
1

我想在CentOS服務器上運行SVN後提交腳本。我想在每次提交資源庫之後,從var/svn/project運行svn export --force到/ var/www/project。儘管我嘗試了很多方法,但卻無法讓它工作。我很感激,如果有人可以發佈腳本,將運行沒有任何用戶權限問題。SVN後提交導出不起作用

實例提交後在/ var/SVN /項目/鉤子文件:

#!/bin/sh 
sudo /usr/bin/svn export --force svn://domain/var/svn/project /var/www/project 

,如果我直接從SSH的root用戶運行該腳本,但不是真正的SVN提交後,它的工作原理。

回答

2

我有一種感覺,sudo失敗。

真的不重要,因爲你想要做的是不好主意。該存儲庫導出有多大?這需要多長時間。 20秒? 2分鐘?

想象一下,您是Subversion用戶,並且您嘗試檢入更改。你做了一個提交,然後突然你的終端似乎凍結。也許是20秒,也許是兩分鐘。無論需要完成後提交掛鉤。男孩,你覺得自己,Subversion太慢了......

更好的方法是用crontab。而且,如果您有能力以root身份執行操作,您當然可以執行crontab。

跟蹤最新的Subversion版本。然後,如果您檢測到更改,則執行導出。簡單的腳本,易於實現,並且不會在等待導出時凍結Subversion。

順便說一下,哪個用戶正在運行Subversion服務器進程。這是執行掛鉤的用戶。如果您的/etc/sudoers文件集中沒有該用戶不需要密碼,則您的提交後掛接將失敗。同樣,Subversion的鉤子都沒有路,所以他們無法找到sudo命令,你必須與任何目錄它在前綴它。

不過,即使你得到它的工作,它仍然是一個壞主意

下面是一個嘗試創建一個crontab,將做你想做的。完全未經測試。我今晚根本沒有時間。但是,它會給你的想法:

#! /bin/bash 
REPO_URL="http://...." 
DIR=... #Where you want the export 
LAST_REV_FILE=/var/run/svn.last.rev 
SVN=/usr/bin/svn 
SED=/usr/bin/sed 
current_rev=$($SVN info $REPO_URL | $SED -n '/^Revision: /s/^Revision: //p') 
if [ ! -f $LAST_REV_FILE ] 
then 
    echo $current_rev > $LAST_REV_FILE 
    exit 0 
fi 

#You're here if there is a last.rev.file 
last_rev=$(echo $LAST_REV_FILE) 
[ $last_rev -ge $current_rev ] && exit 0 

# New Revision 
echo $current_rev > $LAST_REV_FILE 
rm -rf $DIR 
$SVN export $REPO_URL $DIR 
+0

由於某種原因後提交不會觸發提交。你有什麼想法是什麼問題? – fiatux

+0

如果這是Unix,則提交後腳本必須具有執行權限,並且可以由運行Subversion服務器的用戶執行。如果您在Windows上,則必須將該文件命名爲post-commit.bat,並且必須設置PATHEXT。作爲一個測試,把'echo「POST COMMIT HOOK失敗!」 2>&1'打印出一些東西,如果post-commit鉤子運行但失敗。 –

+1

它是一個unix服務器,我試着在提交後嘗試chmod 777。仍然沒有被觸發。 – fiatux