2

私はこのスクリプトをネット上で見つけましたが、リポジトリで機能していると言っている人はほとんどいませんでした。スクリプトは、コミット前のチェックでチェック中にコメントのチェックを強制できるようにすることです。問題は、SVNのhooksディレクトリに追加したところ、すべてのコミット(コメントのあるものも含む)が失敗し、このエラーメッセージ 「Commit事前コミット(終了コード255)によってブロックされ、出力がありません」

同じエラーが発生するため、スクリプトを変更したり削除したりすることはできません。このpre-commitスクリプトを元に戻す方法に関する提案はありますか?

#!/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

4

2 に答える 2

5

これは、フックを実行していないことを意味します。このようなエラーが発生した場合は、次のような意味があります。

  • スクリプトの上部にあるシェバンが正しくありません。システム上にBASHシェルがないか、BASHシェルが/ usr / local / bin/bashまたは/usr/ share / bin/bashにある可能性があります。Linuxシステムではありそうにありませんが、Solarisでは非常に可能性があります。これをチェックして。
  • スクリプトに実行可能ビットが設定されていません。スクリプトに対してを行う必要がありchmod +xます。
  • pre-commitシェルスクリプトは、スクリプト自体を呼び出すことができません。フックディレクトリ内のスクリプトを見て、pre-commitスクリプトを呼び出していることを確認してください。または、スクリプトの名前をに変更しpre-commitて、そのディレクトリに配置したこと。

もう1つの可能性(スクリプトを詳しく見る)は、pre-commitBASHスクリプトをpre-commit.batWindowsシェルのバージョンと混同していることです。スクリプトの後半では、構文はWindowsシェルですが、上半分はBASHシェルです。

これが私の事前コミットフックです。Perlであるため、WindowsとUnix / Linux/Macの両方で動作します。WindowsボックスにActivePerlまたはStrawberryPerlをインストールする必要がありますが、どちらも無料でオープンソースです。

私のpre-commitスクリプトは、人々がタグを作成できるようにすることでタグを誤って変更しないようにするなど、いくつかのことを実行できますが、タグを変更することはできません。

私のスクリプトでは、コミットコメントでもう少しチェックすることもできます。たとえば、バグ追跡システムを使用していますか?コミットコメントでバグ追跡IDを要求するようにフックを設定できます。

もう1つの可能性(そして私が本当にお勧めするもの)は、Jenkinsのような継続的ビルドツールを使用することです。Jenkinsは自動的にビルドを実行し、コミットごとにテストを実行します。これにより、ポストプロダクションではなく、エラーを早期に検出できます。

Jenkinsの大きな利点は、誰が変更を加えたか、どのような変更を加えたかなど、あらゆる種類の情報を含む美しいWebページを表示することです。開発者はこれが非常に役立つので、質問されることなく自動的に適切なコミットコメントを入力し始めます。Subversionの変更ログを調べて、Jenkinsを使い始めた正確な瞬間を正確に特定できるのは驚くべきことです。

pre-commitスクリプトでは、空のコメントをチェックするだけです。開発者がコメントを入力したくない場合は、次のようなコメントを取得し始めchanged codeadaadsdasdasdaコミットを許可するだけです。Jenkinsのようなものを使用すると、開発者は実際に自分で良いコミットコメントを入れ始めます。

于 2012-01-30T17:33:18.597 に答える
3

pre-commit が実行可能に設定されていることを確認しましたか。

ls -l 事前コミット

また、svn リポジトリ (私の場合は httpd) を提供するプロセスによっても実行可能である必要があることに注意してください。

于 2012-01-30T14:18:44.673 に答える