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?
Trả lời
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/
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ự.
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.
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' –
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. –
@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
Đâ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
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
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.
- 1. Tôi có thể xóa một cam kết trong Subversion không?
- 2. Windows Pre-cam kết móc cho chiều dài bình luận Subversion
- 3. Làm thế nào để git cam kết không có gì mà không có lỗi?
- 4. Làm thế nào tôi có thể kết thúc ncurses mà không kết thúc chương trình C++?
- 5. Làm thế nào tôi có thể ngăn ToggleButton bị Toggled mà không thiết lập IsEnabled
- 6. Làm thế nào để làm cho một div vô hình mà không bình luận nó ra?
- 7. Làm thế nào có thể sử dụng dao cạo Bình luận trên khối JavaScript/
- 8. Làm thế nào tôi có thể thấy các cam kết đến trong git?
- 9. tôi có thể xóa các cam kết cũ không?
- 10. git tôi có thể tăng tốc độ cam kết không?
- 11. Làm thế nào để tôi cam kết bí mật trong git với ngày cam kết không có trong quá khứ?
- 12. Subversion dòng lệnh cam kết không làm gì
- 13. Làm thế nào tôi có thể buộc mercurial chấp nhận một cam kết trống
- 14. TortoiseGit: Làm thế nào tôi có thể thấy danh sách các cam kết sắp được đẩy
- 15. Git: Làm thế nào tôi có thể sửa đổi cam kết của máy chủ?
- 16. Làm thế nào tôi có thể kéo mọi yêu cầu cam kết hạt nhân Linux?
- 17. Làm thế nào tôi có thể thực sự làm Subversion bỏ qua một thư mục?
- 18. Subversion: Cách hợp nhất một cam kết cụ thể
- 19. Tôi có thể viết các bình luận trong sơ đồ lớp UML không?
- 20. Làm cách nào tôi có thể xem tệp như ở một cam kết git cụ thể?
- 21. Làm thế nào để doxygen bình luận Qt tài sản?
- 22. Đẩy mà không có cam kết trong Mercurial hoặc Git
- 23. Subversion: Cách xem trước cam kết?
- 24. git: Hiển thị chỉ số khác trong cam kết thông báo như bình luận
- 25. Cam kết thư mục với Subversion
- 26. Trong C#, làm thế nào tôi có thể tính toán lại InnerException mà không làm mất dấu vết ngăn xếp?
- 27. Chúng ta có nên viết bình luận rộng rãi không?
- 28. Làm thế nào tôi có thể chuyển kho git của tôi đến một đặc biệt cam kết
- 29. Đẩy mà không cam kết
- 30. Regex - Sử dụng/* trong JS mà không nhận được mã của tôi trong bình luận
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
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
Đồng ý, điều này là quan trọng nhất. –