2011-09-06 61 views
2

我在網上發現了這個腳本,很少有人說它在爲他們的倉庫工作。 該腳本允許預先提交檢查,以檢查時強制檢查意見。 問題是我將它添加到SVN的掛鉤目錄中,現在所有提交(即使是帶有註釋的提交)都失敗,出現此錯誤消息 SVN pre-commit問題

「用無輸出預提交(退出代碼255)提交封鎖」現在,我不能改變的腳本或刪除它,因爲我得到了同樣的錯誤。有關如何恢復此預先提交腳本的任何建議?

#!/bin/bash # [1] REPOS-PATH (the path to this repository) # [2] TXN-NAME (the name of the txn about to be committed) REPOS="$1" REV="$2" @echo off :: :: Stops commits that have empty log messages. :: @echo off setlocal # rem Subversion sends through the path to the repository and transaction id set REPOS=%1 set TXN=%2 # rem check for an empty log message svnlook log %REPOS% -t %TXN% | findstr . > nul if %errorlevel% gtr 0 (goto err) else exit 0 :err echo. 1>&2 echo Your commit has been blocked because you didn't give any log message 1>&2 echo Please write a log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1

+0

所以你想恢復預提交鉤?或者要求修復pre-commit hook? –

+0

可以。我試圖改變腳本或恢復更改,但無論如何,我收到相同的SVN錯誤。因此我被卡住了。刪除不起作用,任何更改不起作用:( – Gajanan

+0

更新:我們必須通過要求root管理員刪除預先提交問題來解決此問題 – Gajanan

回答

3

你檢查看到,預提交設置爲可執行文件。

的ls -l預提交

注意它也必須是可執行的,供應你的svn回購,在我的案件的httpd進程。

5

這意味着它甚至不執行你的鉤子。每當你得到這樣的錯誤,它可能意味着幾件事情:

  • 腳本頂部的shebang不正確。也許在你的系統上,沒有BASH shell,或者BASH shell位於/ usr/local/bin/bash或/ usr/share/bin/bash。不太可能在Linux系統上,但很可能在Solaris上。檢查這個。
  • 該腳本沒有設置可執行位。您需要在腳本上執行chmod +x
  • 預提交shell腳本無法調用您的腳本本身。查看掛鉤目錄中的pre-commit腳本,並確保它正在調用腳本。或者,您已將腳本重命名爲pre-commit並將其放入該目錄中。

另一種可能性(在你的腳本更加緊密地看)是,你卻把pre-commit bash腳本與pre-commit.bat版本的Windows外殼。你的語法是腳本後半部分的Windows shell,但是你的上半部分是BASH shell。

這是我的pre-commit hook。它使用Perl,因此它可以在Windows和Unix/Linux/Mac上運行。你必須在你的Windows機器上安裝ActivePerlStrawberry Perl,但兩者都是免費且開源的。

我提交前的腳本可以做幾件事情,例如確保人們不小心讓人民創造標籤更改標籤,但不能修改它們。

我的腳本還允許多一點檢查提交評論。例如,你使用錯誤跟蹤系統嗎?您可以設置我的鉤子以在提交註釋中要求錯誤跟蹤ID。

另一種可能性(和東西我真的建議)是使用持續構建工具,如Jenkins。 Jenkins自動執行構建,並將在每次提交時運行測試。這可以確保早期發現錯誤,而不是說後期製作。

詹金斯的一大優點是,它提出了各種各樣的喜歡誰進行了改變信息的網頁美觀和他們做了什麼樣的變化。開發人員覺得這非常有用,他們會自動開始投入良好的提交評論而不被詢問。令人驚訝的是,我可以通過Subversion更改日誌並確定我開始使用Jenkins的確切時間。

在您的預提交腳本中,您只需檢查空的註釋。如果您的開發人員不想發表評論,您將開始獲得評論,如changed codeadaadsdasdasda只是爲了允許提交通過。通過像詹金斯這樣的東西,開發人員實際上開始自己提交良好的提交意見。