34

私はこれでどこにも行かないようです。Webでスクリプトを検索するなど、誰でも、TortoiseSubversionでのコミットに関するコメントを入力するためにx文字を入力する必要があるWindows環境ですぐに使用できるpre-commit.tmplを編集できるスクリプトを入手しました。チームのすべてのメンバーが必要になるのに対し、この要件はSVNサーバーからクライアントにプッシュダウンされるようにグローバルに?

私はスクリプト言語を知りません。これは、次の3時間のスクリプトを理解するために時間を割かなくても、かなり単純なことになるはずです。

4

5 に答える 5

57

これは、コメントがあることを要求する.batファイルです。コメントに少なくとも1つの文字が存在するかどうかをチェックします。

 @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           

 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 enter a comment. 1>&2  
 echo Write a log message describing the changes made and try again. 1>&2
 echo Thanks 1>&2
 exit 1

このファイルは、pre-commit.batという名前のリポジトリの/hooksフォルダーにあります。最小限の文字数が必要な場合、変更する行は次のとおりです。

svnlook log %REPOS% -t %TXN% | findstr . > nul

したがって、最低10文字が必要な場合は、1文字ではなく10文字が必要です。

svnlook log %REPOS% -t %TXN% | findstr .......... > nul

findstrコマンドのより高度なオプションを使用すると、より高度なチェック(特定の文字セットなど)を実行できます。

于 2009-05-15T15:20:53.733 に答える
2

私はSubversionNotifyを使用しています。おそらく必要以上のことを実行しますが、設定は非常に簡単です。

于 2009-05-15T15:43:18.500 に答える
2

私はあなたが望むことを正確に行うことができるpre-commit フックを持っています。さらに、さらに多くの。

  • コミット コメントの最小長を指定できます。
  • コミット コメントを正規表現と照合できます。長さだけでなく、特定のパラメータも指定できます。たとえば、コミット コメントには、特定の欠陥への変更を追跡できるように、欠陥追跡システムが使用するバグ番号が含まれていますか?

また、次のこともできます。

  • 特定のファイルまたはディレクトリに対してさまざまなコミット権限を設定します。
    • read-write : ユーザーはこれらのアイテムをチェックアウトしてコミットできます。
    • read-only : ユーザーはこのアイテムをチェックアウトできますが、変更をコミットすることはできません。
    • add-only : ユーザーは 経由svn cpでディレクトリを追加できますが、変更をコミットすることはできません。/tagsこれは、タグの作成は許可されているが、タグの変更は許可されていないディレクトリに最適です。
    • no-delete : ユーザーは変更をコミットして新しいファイルを追加できますが、これらのファイルを削除することはできません。
    • no-add : ユーザーは変更をコミットすることしかできず、コミットでファイルを追加または削除することはできません。

また、これを行うこともできます。

  • globbingの正規表現を介して特定のファイル名を禁止します。
  • 特定のファイルまたはディレクトリには、特定のプロパティが特定の値に設定されている必要があります。Unix シェル スクリプト、Unix Makefile、および Windows バッチ ファイルの行末が正しいか、またはsvn:ignore設定されていることを確認するなどの場合に非常に役立ちます。これにより、ユーザーがコミットしてはならないファイルを誤ってコミットすることがなくなります。
  • 特定のリビジョン プロパティに特定の値を設定する必要があります。svn:logこれはコミットメッセージを確認する方法ですが、特定の正規表現と一致する必要があると言っています.

このプレコミット スクリプトは Perl で記述されています。デフォルトでは、Perl には Unix、Mac、および Linux サーバーが付属しています。残念ながら、Windows コンピューターには含まれていません。幸いなことに、 ActivePerlStrawberry Perlなど、PC 用のオープン ソースで無料の簡単にインストールできる Perl パッケージがいくつかあります。

于 2012-12-11T12:41:49.530 に答える
0

これを試して :

rem Make sure that the log message contains some text.
set REPOS=%1
set TXN=%2

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9]  
IF %ERRORLEVEL% EQU 0 GOTO OK  
echo Your commit has been blocked because you didn't provide a 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  

:OK  
rem -------------------------------------------------------------  
rem Check if comment is in list of reserved words to not be used..  
rem -------------------------------------------------------------  

"C:\Program Files\Subversion\bin\SVNlook.exe" log -t %TXN% %REPOS% >comment  
setlocal enabledelayedexpansion  
Set SEPARATOR=  
set COMMENT=  
for /f "delims=" %%a in (comment) do (      
    set currentline=%%a  
    set COMMENT=!COMMENT!%SEPARATOR%!currentline!  
)  

FIND "%COMMENT%" "C:\Program Files\Subversion\excludedwords.txt">Null  
If %ERRORLEVEL% EQU 1 goto OK2  

:Fail  
echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2  
echo Line is -%COMMENT%- 1>&2  
echo Please write a proper log message describing the purpose of your changes and 1>&2  
echo then try committing again. -- Thank you 1>&2   
exit 1  


:OK2  
rem -------------------------------------------------------------  
rem Check number of words on the line if = 2 then reject comment  
rem -------------------------------------------------------------  
Set VAR1=%COMMENT%  
Set count=0  
For %%j in (%VAR1%) Do Set /A count+=1  
IF %count% EQU 2 goto Fail2  
goto OK3  

:Fail2  
echo Your commit has been blocked because not enough detail supplied 1>&2  
echo Please write a longer log message describing the purpose of your changes and 1>&2  
echo then try committing again. -- Thank you 1>&2   
exit 1  

:OK3  
rem -------------------------------------------------------------  
rem Check that the author of this commit has the rights to perform  
rem -------------------------------------------------------------  
rem the commit on the files and directories being modified.  
rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1  

rem All checks passed, so allow the commit.  
exit 0  
于 2009-12-04T14:42:30.800 に答える