2009-12-18 21 views
60

Có ai biết cách ngăn chặn các cam kết vào kho lưu trữ mã Subversion khi không có nhận xét cam kết nào được nhập không?Làm thế nào tôi có thể ngăn Subversion cam kết mà không có bình luận?

+13

Lưu ý rằng móc chỉ có thể ngăn chặn các cam kết tình cờ mà không có nhận xét. Trừ khi bạn giáo dục người dùng của bạn, họ sẽ chỉ cam kết với một cái gì đó như "sửa lỗi" thay vào đó, mà không có công đức trên một thông điệp trống rỗng. – Thilo

+1

Tôi đồng ý với Thilo. Nếu ý định của bạn là để ngăn chặn những sai lầm khi cam kết mà không có ý kiến, các giải pháp được cung cấp ở đây sẽ hoạt động. Nếu bạn muốn điều này buộc người dùng phải cung cấp nhận xét ý nghĩa bằng cách buộc họ nhận xét, họ sẽ viết "sửa lỗi" và "tính năng mới" trong tất cả các cam kết. Đây là một vấn đề văn hóa. – GmonC

+1

Đồng ý, điều này là quan trọng nhất. –

Trả lời

57

Bạn có thể dùng một cái móc (đặt nó vào <repository>/hooks và đặt tên là pre-commit.bat (Windows)):

@echo off 
:: 
:: Stops commits that have empty log messages. 
:: 

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 

src: http://www.anujgakhar.com/2008/02/14/how-to-force-comments-on-svn-commit/

+5

+1, mặc dù tất nhiên điều này không thể buộc người dùng sử dụng nhận xét có ý nghĩa. svn commit -m "foo" foo.h sẽ vẫn hoạt động. – Glen

+0

Phần 'nul' là gì? Mục đích của nó là gì? – bahrep

+0

@bahrep, chuyển hướng thư, xem thêm: http://support.microsoft.com/kb/110930 – miku

6

Tạo móc trước. Dưới đây là some instructions về cách tự làm như vậy hoặc here là tập lệnh móc mẫu sẽ từ chối mọi thứ có thông báo cam kết ngắn hơn 10 ký tự.

+1

Tuyệt vời! Hoạt động tốt, tôi chỉ cần thay đổi vị trí của python và svnlook. – Nux

+1

Liên kết đến tập lệnh móc mẫu từ chối mọi thứ ngắn hơn, sau đó 10 ký tự bị hỏng. – tgharold

+2

câu trả lời này là tất cả "chỉ liên kết" một chút. Bạn không thể đặt nội dung của ví dụ móc vào câu trả lời? – Liam

17

Trên thực tế, khi bạn tạo một kho lưu trữ Subversion, thư mục con hooks nó đã chứa các mẫu móc. Kiểm tra cái gọi là pre-commit.tmpl để biết chi tiết về các thông số của móc. Nó cũng chứa một ví dụ cho một móc mà bạn đang tìm kiếm:

#!/bin/sh 
REPOS="$1" 
TXN="$2" 

# Make sure that the log message contains some text. 
SVNLOOK=/usr/local/bin/svnlook 
$SVNLOOK log -t "$TXN" "$REPOS" | \ 
    grep "[a-zA-Z0-9]" > /dev/null || exit 1 

Bạn có thể viết móc trong bất kỳ tập lệnh hoặc ngôn ngữ nào, miễn là nó có thể thực thi trên máy Subversion của bạn.

+0

Tính năng này hoạt động trên Ubuntu với UberSVN. Mặc dù tôi cần phải trỏ SVNLOOK đến '/ opt/ubersvn/bin/svnlook' –

+0

Tôi cũng phải' sudo chmod 777 pre-commit' để làm cho nó hoạt động; nếu không, tất cả các cam kết đều bị từ chối. –

+2

@NamGiVU 777 không nên được sử dụng nhẹ, bạn chỉ cần sử dụng 700 hoặc 750 trên tệp để nó hoạt động nếu chủ sở hữu được đặt chính xác. – Shadok

18

Đây là một cam kết trước móc với @ thông báo lỗi chi tiết miku cho Linux:

#!/bin/sh 

REPOS="$1" 
TXN="$2" 

SVNLOOK=/usr/bin/svnlook 
$SVNLOOK log -t "$TXN" "$REPOS" | \ 
    grep "[a-zA-Z0-9]" > /dev/null 

GREP_STATUS=$? 
if [ $GREP_STATUS -ne 0 ] 
then 
    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 
fi 
exit 0 
5

Linux kịch bản cho hơn 15 characters--

#!/bin/bash 
REPOS="$1" 
TXN="$2" 
# Make sure that the log message contains some text. 
SVNLOOK=/usr/bin/svnlook 
# Comments should have more than 5 characters 
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS" | grep [a-zA-Z0-9] | wc -c) 
if [ "$LOGMSG" -lt 15 ]; 
then 
echo -e "Please provide a meaningful comment when committing changes." 1>&2 
exit 1 
fi 

Nguồn- http://java.dzone.com/articles/useful-subversion-pre-commit

5

Nếu bạn chỉ sử dụng TortoiseSVN thì bạn có thể thêm thuộc tính TortoiseSVN vào thư mục gốc: tên sản phẩm: tsvn:logminsize giá trị: 1 Điều này sẽ tắt nút OK trong cửa sổ cam kết TortoiseSVN rồi Thông báo trống. Xin lưu ý rằng thuộc tính này là TortoiseSVN cụ thể, nó có thể không hoạt động với máy khách SVN khác.

Các vấn đề liên quan