2012-04-05 175 views
4

我有一個SVN repo在我的服務器上設置,並有後提交問題。我在我的iMac上使用SmartSVN作爲我的客戶端。我通過SmartSVN的ssh + svn進行連接。我能夠成功連接到SVN並對其進行更改,但是在從我的SVN客戶端提交後,我的提交後腳本不起作用。SVN提交後掛鉤將不會運行後提交

我創建了我的post-commit shell腳本,名爲post-commit.sh,並將它放在hooks目錄中,認爲這是您爲了使其工作而必須做的所有事情。基本上,腳本所做的是將SVN簽出到臨時工作區,然後將必要的文件上載到我的服務器上的開發子域。我這樣做是爲了讓我可以爲用戶爲我的Web應用程序所做的所有更改提供測試環境。該文件最初看起來很喜歡這個。

rm -rf /home/modionzc/tempworkspace/artistcondevspace/* 
cd /home/modionzc/tempworkspace/artistcondevspace 
svn checkout file:///home/modionzc/svnrepos/artistcondevrep 
rm -rf /home/modionzc/public_html/devsuper/application/* 
rm -rf /home/modionzc/public_html/devsuper/css/* 
rm -rf /home/modionzc/public_html/devsuper/js/* 
rm -rf /home/modionzc/public_html/devsuper/images/* 
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/application/* /home/modionzc/public_html/devsuper/application/ 
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/css/* /home/modionzc/public_html/devsuper/css/ 
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/js/* /home/modionzc/public_html/devsuper/js/ 
cp -r /home/modionzc/tempworkspace/artistcondevspace/artistcondevrep/trunk/images/* /home/modionzc/public_html/devsuper/images/ 
cp /home/modionzc/artistconconfig/appconfigfiles/config.php /home/modionzc/public_html/devsuper/application/config/config.php 
cp /home/modionzc/artistconconfig/appconfigfiles/database.php /home/modionzc/public_html/devsuper/application/config/database.php 
cd /home/modionzc/public_html/devsuper 
chmod -R 755 * 
chmod 644 $(find *.* ! -type d) 

當我從命令行手動運行並更新必要的文件時,它運行正常。現在由於某種原因,只要我從我的SmartSVN提交,它就不會被調用。通過存儲庫進行更改,如果我手動運行腳本,則可以看到實際進行的更新。我做了一些研究,發現它可能是許可問題,或者我沒有使用絕對路徑。我在整個腳本中使用絕對路徑。對文件的權限設置爲755.我能想到的唯一的事情是實際的SVN用戶沒有權限,這是在conf文件中創建的用戶。我已經瀏覽了SVN手冊並通過互聯網找到了一個沒有太多成功的解決方案。

一個建議是製作日誌文件以查看腳本被調用時引起的任何錯誤。所以現在我的post-commit腳本調用了具有上述命令的另一個文件,並輸出命令行返回到一個名爲svna.log的文件。 post-commit.sh文件現在看起來像這樣。

cd /home/modionzc/hooktest/ 
/home/modionzc/hooktest/ac_post_commit.sh &> svna.log 

其中ac_post_commit.sh具有上面的原始代碼。 同樣,如果我手動調用它,所有的響應都會根據需要進入文件,但如果我從SmartSVN提交工作,則日誌文件實際上是空的。

僅供參考 - 由於某種原因,我的post-commit.sh在其末尾有一個*,當我在鉤子目錄中找到文件時,它被列爲post-commit.sh *。

請任何幫助,這將不勝感激。

+0

如果將'post-commit.sh'重命名爲'post-commit',會發生什麼? – Wrikken 2012-04-05 16:45:30

+0

您在目錄列表中的'post-commit.sh'末尾看到一個'*',因爲'ls'命令可能與'ls -CF'類似。 '-F'選項告訴'ls'用'*'標記可執行文件,用'/'標記目錄等。 – 2012-04-06 00:49:28

回答

0

難道你錯過了一個#!/ bin/sh的開頭嗎?

+0

沒有,這根本不起作用。這是不是一個評論 – Dom 2012-04-05 23:04:46

+0

它表明執行腳本到linux時使用的解釋器,請參閱[Shebang](http://en.wikipedia.org/wiki/Shebang_%28Unix%29) – mensi 2012-04-06 22:40:36