주석 길이의 전복에 대한 Windows Pre-Commit 후크
-
22-08-2019 - |
문제
나는 이것을 어디로도 받고있는 것 같다. 스크립트 등을 검색하는 등. 이 요구 사항은 SVN 서버의 클라이언트로 추진되는 반면 전 세계적으로 팀의 모든 구성원이 필요합니까?
나는 스크립팅 언어를 모른다. 그리고 이것은 다음 3 시간 동안 스크립팅을 알아내는 데 시간을 할애하지 않고는 꽤 간단해야한다.
해결책
주석이 필요한 .bat 파일입니다. 주석에 적어도 하나의 문자가 있는지 확인합니다.
@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
이 파일은 Repository의 /hooks 폴더 (pre-commit.bat)에 있습니다. 최소의 문자가 필요한 경우 수정해야 할 라인은
svnlook log %REPOS% -t %TXN% | findstr . > nul
따라서 최소 10자를 원한다면 하나가 아닌 10자가 있어야합니다.
svnlook log %REPOS% -t %TXN% | findstr .......... > nul
더 Findstr의 고급 옵션 명령은 더 멋진 점검을 할 수 있습니다 (특정 문자 세트, ect)
다른 팁
나는 사용한다 SubversionNotify, 아마도 당신이 필요로하는 것보다 더 많은 일을하지만 설정하기가 매우 간단합니다.
이 시도 :
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
나는있다 사전 커밋 후크 그것은 당신이 원하는 것을 정확하게 할 수 있습니다. 게다가 훨씬 더.
- 최소 커밋 주석 길이를 지정할 수 있습니다.
- 당신은 commit 댓글을 a에 대해 일치시킬 수 있습니다 정규 표현. 길이를 지정할뿐만 아니라 특정 매개 변수를 지정할 수도 있습니다. 예를 들어, 커밋 주석에 결함 추적 시스템이 사용하는 버그 번호가 포함되어 있으므로 특정 결함으로 변경을 추적 할 수 있습니까?
또한 다음을 수행 할 수 있습니다.
- 특정 파일 또는 디렉토리에 대한 다양한 커밋 권한을 설정하십시오.
- 읽기 쓰기: 사용자는 이러한 항목을 확인하고 커밋 할 수 있습니다.
- 읽기 전용: 사용자는이 항목을 확인할 수 있지만 변경 사항을 커밋 할 수는 없습니다.
- 추가 전용: 사용자는 디렉토리를 통해 디렉토리를 추가 할 수 있습니다
svn cp
, 그러나 변경 사항을 저 지르지 마십시오. 이것은 완벽합니다/tags
태그를 만들 수 있지만 태그를 수정할 수없는 디렉토리. - 지수 없음: 사용자는 변경 사항을 커밋하고 새 파일을 추가 할 수 있지만 이러한 파일을 삭제하지는 않습니다.
- 무대: 사용자는 변경 사항 만 커밋하고 커밋에서 파일을 추가하거나 삭제할 수 없습니다.
또한이 작업을 수행 할 수 있습니다.
- 정규 표현식을 통해 특정 파일 이름을 금지합니다 글로브,
- 특정 파일 또는 디렉토리에는 특정 속성이 특정 값으로 설정되어 있어야합니다. UNIX 쉘 스크립트, UNIX MakeFiles 및 Windows 배치 파일을 확인하는 데 매우 유용한 경우에 매우 유용합니다.
svn:ignore
사용자가 실수로 커밋하지 말아야 할 파일에 커밋하지 않도록 설정되어 있습니다. - 특정 값으로 특정 수정 속성을 설정해야합니다. 이것이 커밋 메시지를 확인하는 방법이지만
svn:log
특정 정규 표현식과 일치해야합니다.
이 사전 커밋 스크립트는 Perl로 작성되었습니다. 기본적으로 Perl에는 Unix, Mac 및 Linux 서버가 제공됩니다. 불행히도 Windows 컴퓨터에는 포함되지 않습니다. 다행히도 몇 가지 오픈 소스가 있으며 무료이며 PC 용 Perl 패키지를 쉽게 설치하기 쉽습니다. ActivePerl 그리고 딸기 perl
Windows에서는 사용할 수 있습니다 VisualSVNServerHooks.exe check-logmessage
VisualSVN 서버와 함께 제공되는 사전 커밋 후크 %VISUALSVN_SERVER%bin
예배 규칙서. 이 간단한 도구는 로그 메시지에서 허용 된 문자 수를 정의하는 데 도움이됩니다.
기사를 참조하십시오 KB140 : VisualSVN 서버에서 커밋 로그 메시지를 확인합니다 지침.