Я всегда считал, что письма о регистрации (фиксации) очень полезны для отслеживания того, что делают другие люди в кодовой базе / репозитории. Как настроить SVN для отправки списка рассылки по каждому коммиту?
Я использую клиенты в Windows и сервер Apache Subversion в Linux. Ответы ниже для различных платформ, вероятно, будут полезны для других людей.
Вы используете хуки post-commit . Вот руководство .
Вот пример сценария Ruby, который отправляет электронное письмо после каждого коммита: commit-email.rb
Вы захотите ознакомиться с перехватчиками репозитория , особенно с перехватом после фиксации .
Какая платформа?
В Mac OS XI установили msmtp и создали сценарий пост-фиксации под хуками в хранилище. Файл .msmtprc должен быть настроен для svn
(или www
) пользователя.
REPOS="`echo $1 | sed 's/\/{root of repository}//g'` "
REV="$2"
MSG=`/usr/local/bin/svn log -v -r HEAD https://localhost$REPOS`
/usr/local/bin/msmtp {list of recipients} <<EOF
Subject: SVN-Commit $REPOS#$REV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8Bit
$MSG
EOF
Сделайте {root of repository}
и {list of recipients}
конкретные для ваших нужд. Обратите внимание, что я использовал UTF-8, потому что у нас есть некоторые специальные символы здесь, в Швеции (åäö).
Существует (большой) пример, написанный на Perl, включенный в источник Subversion (его можно посмотреть здесь ).
Взгляните на автономный инструмент Subversion Notify (только для Windows!), Он может отправлять электронные письма при коммите и многое другое!
Там есть связанный с этим вопрос здесь на пост фиксации крючки. Лично я предпочитаю отправлять сообщения чему-то, от чего я могу получать RSS-ленту, так как электронная почта за фиксацию довольно быстро перегружает мой почтовый ящик.
Seconding @ Matt Miller в RSS-каналах.
Есть полезный инструмент под названием WebSVN, который предлагает RSS-каналы каждого репозитория и отдельные ветви / теги / папки с сообщениями о полной фиксации. Это также отличный веб-интерфейс для быстрого просмотра истории файлов и фиксации / сравнения без необходимости запускать обновление и открывать выбранный вами редактор.
Как сказал кто-то еще, «какая платформа». В Windows я использовал «blat», который представляет собой почтовый SMTP-пакет для командной строки freebie, а также post-commit и другой пакетный файл.
Фиксация поста выглядит следующим образом: (просто вызывает другой пакетный файл)
call d:\subversion\repos\rts\hooks\mail %1 %2
И mail.bat выглядел так:
copy d:\subversion\repos\RTS\hooks\Commitmsg.txt %temp%\commit.txt
copy d:\subversion\repos\RTS\hooks\subjbase.txt %temp%\subject.txt
svnlook info -r %2 %1 >> %temp%\commit.txt
echo Revision %2 >> %temp%\commit.txt
svnlook changed -r %2 %1 >> %temp%\commit.txt
svnlook author -r %2 %1 >> %temp%\subject.txt
c:\utils\blat %temp%\commit.txt -t <me@my.email.com> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <svn@my.email.com>" -noh2
Самый большой недостаток в написании хуков SVN заключается в том, что у вас может не быть настройки среды - нет exe-пути, нет временного пути и т. Д. Хотя, возможно, это улучшилось в более поздних сборках SVN.
Я использую пост-скрипт совершить подобное этому одному .
Он отправляет приятное письмо в формате HTML. Я обновил его, где он выделяет код, который был удален красным, и выделяет код, который был добавлен синим.
Вы можете использовать buildbot . Это инструмент, который может выполнять произвольные действия всякий раз, когда происходит регистрация. Это полнофункциональная система непрерывной интеграции, но если вам нужны только электронные письма, она, безусловно, справится с этим. Он имеет плагины для различных SCM, включая SVN.
В каталоге «hooks» вашей конкретной ветки subversion есть 9 файлов шаблонов, с которых вы можете начать.
Ключевой момент: Subversion не выполнит ни один из файлов, пока они не будут переименованы. Чтобы заставить post-commit.tmpl выполняться под unix, переименуйте его в «post-commit». В Windows переименуйте его в «post-commit.bat» или «post-commit.exe». Subversion не будет выполнять файл, если он называется «post-commit.tmpl» или «post-commit.sh» или тому подобное.
Также убедитесь, что файл исполняется тем же пользователем, который запускает Subversion.
Также SVNMailer , который работает на Linux.
Проверьте пакет svn-mod-email , описанный здесь . СВН-мод-почта является мощным инструментом для управления SVN уведомлений по электронной почте, которая поставляется в архиве Debian. Это легко установить, настроить и использовать.
Сервер VisualSVN имеет полезную функцию уведомления по электронной почте VisualSVNServerHooks.exe
. Он поддерживает цветные различия и может отправлять уведомления о фиксации только тогда, когда фиксация влияет на определенный путь к репозиторию.
См. «Настройка уведомлений по электронной почте на сервере VisualSVN» .
1) Установите svnnotify на сервер svn, используя sudo apt-get
2) Используйте пост-фиксацию вашего репо (читайте о пост-фиксации на сайте svn)
3) Откройте файл перехвата post-commit и вставьте следующий код, чтобы отправить электронное письмо с использованием сервера smtp. Использование smtp очень просто, так как вам не нужно настраивать sendmail.
4) Убедитесь, что после \ (перенос строки) у вас нет лишнего пробела.
#!/bin/sh
REPOS="$1"
REV="$2"
TO="xyz@yah.com" # who will receive the notifications
FROM="hello@goog.com" # what will be in "FROM" fields
/usr/bin/svnnotify \
--repos-path "$REPOS" \
--revision "$REV" \
--to $TO \
--from $FROM \
--reply-to $FROM \
--smtp "YOUR.SMTP.MAIL.COM" \
--subject-prefix "[svn commit]" \
--attach-diff -a \
--header 'Message generated on Subversion Check-in.' \
--footer 'OpenSource Team. ' \
--svnlook "/usr/local/bin/svnlook" \
--handler HTML::ColorDiff # make diff pretty
Я сделал это на сервере Linux в 3 этапа:
Создайте список рассылки (
svn-notify@xy.com
) и добавьте людей в список.редактировать
/path_to_your_svn/svn/hooks/svn-notify/mailer.conf
- to_addr = svn-notify@xy.com
- from_addr =% (автор) s@xy.com
- commit_subject_prefix = [XY-SVN]
- Добавьте эту строку в ваш
/path_to_your_svn/svn/hooks/post-commit
файл:
/path_to_your_svn/svn/hooks/svn-notify/mailer.py commit "$REPOS" "$REV" /path_to_your_svn/svn/hooks/svn-notify/mailer.conf